Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Tаймаут на выполнение функции из DLL  [new]
vlkc
Member

Откуда:
Сообщений: 51
Здрасте, может кто знает как сделать таймаут ожидания выполнения функции котороя запущена из dll?
19 июн 17, 15:50    [20575039]     Ответить | Цитировать Сообщить модератору
 Re: Tаймаут на выполнение функции из DLL  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 43170

Легко: запускаешь поток, запускаешь функцию, через некоторое время убиваешь функцию вместе
с потоком.

Posted via ActualForum NNTP Server 1.5

19 июн 17, 15:54    [20575055]     Ответить | Цитировать Сообщить модератору
 Re: Tаймаут на выполнение функции из DLL  [new]
vlkc
Member

Откуда:
Сообщений: 51
можно примерчик для зеленых :)
19 июн 17, 15:58    [20575071]     Ответить | Цитировать Сообщить модератору
 Re: Tаймаут на выполнение функции из DLL  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 43170

Если зелёный - забудь, это невозможно.

Posted via ActualForum NNTP Server 1.5

19 июн 17, 16:01    [20575088]     Ответить | Цитировать Сообщить модератору
 Re: Tаймаут на выполнение функции из DLL  [new]
vlkc
Member

Откуда:
Сообщений: 51
ну хорошо - желтый :)
19 июн 17, 16:47    [20575368]     Ответить | Цитировать Сообщить модератору
 Re: Tаймаут на выполнение функции из DLL  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 43170

Всё равно обломись.

Posted via ActualForum NNTP Server 1.5

19 июн 17, 16:52    [20575398]     Ответить | Цитировать Сообщить модератору
 Re: Tаймаут на выполнение функции из DLL  [new]
schi
Member

Откуда: Москва
Сообщений: 1591
vlkc
Здрасте, может кто знает как сделать таймаут ожидания выполнения функции котороя запущена из dll?


Функция из DLL ничем не отличается от функции не из DLL
19 июн 17, 17:58    [20575681]     Ответить | Цитировать Сообщить модератору
 Re: Tаймаут на выполнение функции из DLL  [new]
vlkc
Member

Откуда:
Сообщений: 51
schi, Спасибо за мысль
19 июн 17, 18:30    [20575758]     Ответить | Цитировать Сообщить модератору
 Re: Tаймаут на выполнение функции из DLL  [new]
vlkc
Member

Откуда:
Сообщений: 51
Event1:= CreateEvent(nil, False, False, nil);
 
Simple_thr := TSimpleThrd.Create();
Simple_thr.Resume;
 
try
  MsgWaitForMultipleObjects (1, Event1, False, 2000, QS_ALLINPUT); //2 секунды ждем пока в потоке отработает функция
  if not Simple_thr.Terminated then begin                                      //несделала работу - обрубаем
    Simple_thr.Terminate;
    Simple_thr:= nil;
  end;
finally
  CloseHandle(Event1);
end;


Как код?
19 июн 17, 20:49    [20575989]     Ответить | Цитировать Сообщить модератору
 Re: Tаймаут на выполнение функции из DLL  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 43170

vlkc
Как код?

Неработоспособен чуть менее чем полностью.

Posted via ActualForum NNTP Server 1.5

19 июн 17, 22:12    [20576079]     Ответить | Цитировать Сообщить модератору
 Re: Tаймаут на выполнение функции из DLL  [new]
alekcvp
Member

Откуда:
Сообщений: 45
ИМХО, как-то так (warninig, говнокод):

case WaitForSingleObject(Simple_thr.Handle, 2000) of
  WAIT_OBJECT_0: { Всё нормально, обрабатываем результаты };
  WAIT_TIMEOUT: TerminateThread(Simple_thr.Handle); // Уничтожаем тред, привет утечки ресурсов!
else
  { Произошла какая-то ошибка, обрабатываем };
end;
20 июн 17, 10:04    [20576572]     Ответить | Цитировать Сообщить модератору
 Re: Tаймаут на выполнение функции из DLL  [new]
alekcvp
Member

Откуда:
Сообщений: 45
Если хочется чтобы приложение не "подвисало" на время ожидания, то надо делить интервал ожидания на куски по 100-200 мс и впихивать туда Application.ProcessMessages;
20 июн 17, 10:05    [20576577]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить