Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать вне Thread'а, что он закончил свое выполнение? [D6, XP]


Страницы:   1 2

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]

Удалено модератором


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо