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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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


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

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

Откуда:
Сообщений: 56
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

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

vlkc
Как код?

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

Posted via ActualForum NNTP Server 1.5

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

Откуда:
Сообщений: 386
ИМХО, как-то так (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

Откуда:
Сообщений: 386
Если хочется чтобы приложение не "подвисало" на время ожидания, то надо делить интервал ожидания на куски по 100-200 мс и впихивать туда Application.ProcessMessages;
20 июн 17, 10:05    [20576577]     Ответить | Цитировать Сообщить модератору
 Re: Tаймаут на выполнение функции из DLL  [new]
vlkc
Member

Откуда:
Сообщений: 56
Поднимаю тему так как этот вариант не работает
10 июл 17, 21:50    [20631088]     Ответить | Цитировать Сообщить модератору
 Re: Tаймаут на выполнение функции из DLL  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 721
vlkc
Поднимаю тему так как этот вариант не работает


Программист из себя никудышный. Самое простое что приходит на ум - заблокировать основную форму, т.е enabled = false и поставит windows обработчик RegisterWindowMessage воспользовавшийся ApplicationEvents ждать посыла сообщения об окончании работы функции. Слать сообщения надо в конце вызываемой функции - функцией PostMessageW
10 июл 17, 21:58    [20631114]     Ответить | Цитировать Сообщить модератору
 Re: Tаймаут на выполнение функции из DLL  [new]
YuRock
Member

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

1. Запоминаешь текущее время (GetTickCount например);
2. Вызываешь свою функцию (как уже сказали, без разницы из dll она или нет);
3. После этого снова вызываешь GetTickCount и отнимаешь предыдущее значение.

Вот тебе и таймаут. В миллисекундах подойдет, надеюсь?
10 июл 17, 22:08    [20631138]     Ответить | Цитировать Сообщить модератору
 Re: Tаймаут на выполнение функции из DLL  [new]
Жышы
Member [заблокирован]

Откуда:
Сообщений: 656
vlkc, в общем виде эту задачу не решить.

Нужно решать конкретную задачу с конкретной функцией.
Расскажи, что за функция у тебя в dll и зачем тебе ограничивать время ее выполнения.
10 июл 17, 22:09    [20631141]     Ответить | Цитировать Сообщить модератору
 Re: Tаймаут на выполнение функции из DLL  [new]
Жышы
Member [заблокирован]

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

1. Запоминаешь текущее время (GetTickCount например);
2. Вызываешь свою функцию (как уже сказали, без разницы из dll она или нет);
3. После этого снова вызываешь GetTickCount и отнимаешь предыдущее значение.

Вот тебе и таймаут. В миллисекундах подойдет, надеюсь?


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

Откуда: Донецк
Сообщений: 2057
Жышы
Расскажи, что за функция у тебя в dll и зачем тебе ограничивать время ее выполнения.
Что за бред? Где автор писал, что хочет ограничить время ее выполнения?
10 июл 17, 22:14    [20631159]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить