![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать вне Thread'а, что он закончил свое выполнение? [D6, XP]
MixAnOL © (2006-07-14 16:44:00)сабж.
Т.е. создаю нить, запускаю, и мне нужно узнать когда она закончила свое выполнение, что бы взять результат и уничтожить ее...
Как это можно сделать штатно?
Можно конечно добавить свойство закончил/незакончил...
Что-то не задумывался об этом раньше..
Подскажите прием :)
Юрий Зотов (2006-07-21 15:35:00) [1]> MixAnOL (21.07.06 15:25) [22]
Совершенно согласен. Поэтому из двух одинаково хороших решений я бы выбрал то, что проще. То есть, стандартную анимашку aviFindFile. И не нужны будут никакие таймеры и никакие заморочки с синхронизацией, да и код получится куда проще.
MixAnOL (2006-07-21 15:25:00) [2]
> Предположим, поиск затянулся и прогрессбар уже дошел до
> конца, а поиск еще идет. Или наоборот, прогрессбар еще не
> дошел до конца, а поиск уже закончился. Как быть?
Это не важно, главное показать что идет процесс...
Можно и не прогресс, а анимацию, но опять же это не важно..
Юрий Зотов (2006-07-21 14:52:00) [3]> MixAnOL (21.07.06 13:57) [18]
Предположим, поиск затянулся и прогрессбар уже дошел до конца, а поиск еще идет. Или наоборот, прогрессбар еще не дошел до конца, а поиск уже закончился. Как быть?
Можено придумать какой-то хитрый алгоритм прогнозирования следующего интервала таймера. Можно еще что-то. А можно просто показать юзеру анимашку вместо прогрессбара. Не знаю, что лучше, но что ПРОЩЕ - знаю точно.
MixAnOL (2006-07-21 14:41:00) [4]
> какая нетерпеливая программа :)
и зачем так иронизировать? по моему, вполне нормальный подход..
StriderMan (2006-07-21 14:06:00) [5]
> просто мне нужно периодически опрашивать, что бы узнать
> готовы результаты или нет
какая нетерпеливая программа :)
MixAnOL (2006-07-21 13:57:00) [6]))
Сделал поиск файлов в отдельном потоке. Юзер задает параметры пиоска, жмет на поиск и ждет когда закончится поиск. В это время я ему показываю прогрессбар. Прогрессбар перемещается по таймеру, а в таймере сделана проверка на завершение потока поиска. Такой способ мне больше нравится, чем помещать что-то в OnTerminate...
evvcom (2006-07-20 08:56:00) [7]> просто мне нужно периодически опрашивать, что бы узнать
что результаты не готовы? :)
Leonid Troyanovsky (2006-07-19 18:38:00) [8]
> MixAnOL (19.07.06 17:01) [15]
> Это все понятно... просто мне нужно периодически опрашивать,
> что бы узнать готовы результаты или нет
Дык, а спрашивать-то зачем?
Если сработал OnTerminate, то поток уже отработал,
результаты готовы.
--
Regards, LVT.
MixAnOL (2006-07-19 17:01:00) [9]
> А для того, чтобы не ломать голову об уничтожении есть FreeOnTerminate
Это все понятно... просто мне нужно периодически опрашивать, что бы узнать готовы результаты или нет
Leonid Troyanovsky (2006-07-14 18:43:00) [10]
> MixAnOL (14.07.06 16:44)
> Т.е. создаю нить, запускаю, и мне нужно узнать когда она
> закончила свое выполнение, что бы взять результат и уничтожить
> ее...
> Как это можно сделать штатно?
> Можно конечно добавить свойство закончил/незакончил...
Есть такое свойство: OnTerminate.
Т.е., сработал оный обработчик - значит, поток завершился.
А для того, чтобы не ломать голову об уничтожении есть FreeOnTerminate.
--
Regards, LVT.
MixAnOL (2006-07-14 17:32:00) [11]> GetExitCodeThread
вот спасибо!
begin...end (2006-07-14 17:20:00) [12]> MixAnOL (14.07.06 17:08) [10]
> мне нужно свойство у нить, что б эго проверить и узнать
> работает она еще или нет...
> вот и спрашиваю есть какая-то стандартная проверка этого
> или нет...
Есть. Если GetExitCodeThread вернёт STILL_ACTIVE, значит, поток ещё не завершён.
SergP. (2006-07-14 17:18:00) [13]А не проще сделать чтобы нить сама уничтожалась, но перед самоуничтожением передавала результаты через SendMessage?
MixAnOL (2006-07-14 17:08:00) [14]дык, WaitFor не возвращает рез-тат пока нить не закончится...
мне нужно свойство у нить, что б эго проверить и узнать работает она еще или нет...
вот и спрашиваю есть какая-то стандартная проверка этого или нет...
Сергей М. (2006-07-14 17:06:00) [15]Удалено модератором
Сергей М. (2006-07-14 17:02:00) [16]
> до этого использовал нити и вопросов не возникало
И ?
MixAnOL (2006-07-14 17:01:00) [17]видать меня глючит в конце рабочей недели, раз народ прикалывается над моими вопросами...
башка уже тупит...
до этого использовал нити и вопросов не возникало..
Сергей М. (2006-07-14 17:00:00) [18]
> MixAnOL (14.07.06 16:59) [5]
> да, я использую TThread...
> да есть функция WaitFor..
И ?
MixAnOL (2006-07-14 16:59:00) [19]видать упал, если у меня такой вопрос возник...
да, я использую TThread...
да есть функция WaitFor..
Call WaitFor to obtain the value of ReturnValue when the thread finishes executing. WaitFor doesn't return until the thread terminates
Phoroon~ (2006-07-14 16:59:00) [20]Удалено модератором