Показать сообщение отдельно
  #9  
Старый 01.05.2017, 16:23
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

На мой взгляд для этих целей проще использовать обычный таймер.
Поиск запустить в одном отдельном потоке, и оттуда ставить таймер, указав обработчик. Через synchronize, разумеется. По истечение таймаута в главном потоке вызовется обработчик, который сделает всё, что нужно.
Ну или создавать делфийский объект "таймер", ставить ему значение и обработчик, и по завершении удалять его.

Или - проще, но не особо точно по времени: при "нахождении" чего-то добавить в список структуру, содержащую то, что надо удалить, и таймаут. Далее просто по повторяющемуся таймеру Delphi каждую условно секунду вычитать 1 из таймаутов всех элементов списка, а когда значение элемента достигло нуля - удалять. Ну и обмазать всё это синзронизацией, разумеется.

Почему эти два подхода лучше - главный поток не висит, а значит - приложение не "зависает". Ну и не плодятся бесполезные потоки, которые только и делают, что Sleep.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием