Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.06;
Скачать: CL | DM;

Вниз

Как узнать вне Thread а, что он закончил свое выполнение?   Найти похожие ветки 

 
MixAnOL   (2006-07-14 16:44) [0]

сабж.

Т.е. создаю нить, запускаю, и мне нужно узнать когда она закончила свое выполнение, что бы взять результат и уничтожить ее...
Как это можно сделать штатно?
Можно конечно добавить свойство закончил/незакончил...

Что-то не задумывался об этом раньше..

Подскажите прием :)


 
Сергей М. ©   (2006-07-14 16:49) [1]


> Подскажите

Подсказываю - нить, закончившаят свое выполнеение, всегда сигнализирует об этом, и сей сигнал обнаруживается чуть ли не любой wait-функцией в составе kernel32


 
MixAnOL   (2006-07-14 16:52) [2]

т.е. мне придется в процедуре делать wait на объект нити?
а выполнение программы не встанет пока нить не отработает?


 
Сергей М. ©   (2006-07-14 16:54) [3]

Удалено модератором
Примечание: Повежливее


 
Phoroon~ ©   (2006-07-14 16:59) [4]

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


 
MixAnOL   (2006-07-14 16:59) [5]

видать упал, если у меня такой вопрос возник...

да, я использую TThread...
да есть функция WaitFor..

Call WaitFor to obtain the value of ReturnValue when the thread finishes executing. WaitFor doesn"t return until the thread terminates


 
Сергей М. ©   (2006-07-14 17:00) [6]


> MixAnOL   (14.07.06 16:59) [5]
> да, я использую TThread...
> да есть функция WaitFor..


И ?


 
MixAnOL   (2006-07-14 17:01) [7]

видать меня глючит в конце рабочей недели, раз народ прикалывается над моими вопросами...

башка уже тупит...

до этого использовал нити и вопросов не возникало..


 
Сергей М. ©   (2006-07-14 17:02) [8]


> до этого использовал нити и вопросов не возникало


И ?


 
Сергей М. ©   (2006-07-14 17:06) [9]

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


 
MixAnOL   (2006-07-14 17:08) [10]

дык, WaitFor не возвращает рез-тат пока нить не закончится...

мне нужно свойство у нить, что б эго проверить и узнать работает она еще или нет...
вот и спрашиваю есть какая-то стандартная проверка этого или нет...


 
SergP.   (2006-07-14 17:18) [11]

А не проще сделать чтобы нить сама уничтожалась, но перед самоуничтожением передавала результаты через SendMessage?


 
begin...end ©   (2006-07-14 17:20) [12]

> MixAnOL   (14.07.06 17:08) [10]

> мне нужно свойство у нить, что б эго проверить и узнать
> работает она еще или нет...
> вот и спрашиваю есть какая-то стандартная проверка этого
> или нет...

Есть. Если GetExitCodeThread вернёт STILL_ACTIVE, значит, поток ещё не завершён.


 
MixAnOL   (2006-07-14 17:32) [13]

> GetExitCodeThread

вот спасибо!


 
Leonid Troyanovsky ©   (2006-07-14 18:43) [14]


> MixAnOL   (14.07.06 16:44)  

> Т.е. создаю нить, запускаю, и мне нужно узнать когда она
> закончила свое выполнение, что бы взять результат и уничтожить
> ее...
> Как это можно сделать штатно?
> Можно конечно добавить свойство закончил/незакончил...


Есть такое свойство: OnTerminate.
Т.е., сработал оный обработчик - значит, поток завершился.
А для того, чтобы не ломать голову об уничтожении есть FreeOnTerminate.

--
Regards, LVT.


 
MixAnOL   (2006-07-19 17:01) [15]


> А для того, чтобы не ломать голову об уничтожении есть FreeOnTerminate

Это все понятно... просто мне нужно периодически опрашивать, что бы узнать готовы результаты или нет


 
Leonid Troyanovsky ©   (2006-07-19 18:38) [16]


> MixAnOL   (19.07.06 17:01) [15]

> Это все понятно... просто мне нужно периодически опрашивать,
>  что бы узнать готовы результаты или нет


Дык, а спрашивать-то зачем?
Если сработал OnTerminate, то поток уже отработал,
результаты готовы.

--
Regards, LVT.


 
evvcom ©   (2006-07-20 08:56) [17]

> просто мне нужно периодически опрашивать, что бы узнать

что результаты не готовы? :)


 
MixAnOL   (2006-07-21 13:57) [18]

))
Сделал поиск файлов в отдельном потоке. Юзер задает параметры пиоска, жмет на поиск и ждет когда закончится поиск. В это время я ему показываю прогрессбар. Прогрессбар перемещается по таймеру, а в таймере сделана проверка на завершение потока поиска. Такой способ мне больше нравится, чем помещать что-то в OnTerminate...


 
StriderMan ©   (2006-07-21 14:06) [19]


> просто мне нужно периодически опрашивать, что бы узнать
> готовы результаты или нет

какая нетерпеливая программа :)


 
MixAnOL   (2006-07-21 14:41) [20]


> какая нетерпеливая программа :)

и зачем так иронизировать? по моему, вполне нормальный подход..


 
Юрий Зотов ©   (2006-07-21 14:52) [21]

> MixAnOL   (21.07.06 13:57) [18]

Предположим, поиск затянулся и прогрессбар уже дошел до конца, а поиск еще идет. Или наоборот, прогрессбар еще не дошел до конца, а поиск уже закончился. Как быть?

Можено придумать какой-то хитрый алгоритм прогнозирования следующего интервала таймера. Можно еще что-то. А можно просто показать юзеру анимашку вместо прогрессбара. Не знаю, что лучше, но что ПРОЩЕ - знаю точно.


 
MixAnOL   (2006-07-21 15:25) [22]


> Предположим, поиск затянулся и прогрессбар уже дошел до
> конца, а поиск еще идет. Или наоборот, прогрессбар еще не
> дошел до конца, а поиск уже закончился. Как быть?

Это не важно, главное показать что идет процесс...
Можно и не прогресс, а анимацию, но опять же это не важно..


 
Юрий Зотов ©   (2006-07-21 15:35) [23]

> MixAnOL   (21.07.06 15:25) [22]

Совершенно согласен. Поэтому из двух одинаково хороших решений я бы выбрал то, что проще. То есть, стандартную анимашку aviFindFile. И не нужны будут никакие таймеры и никакие заморочки с синхронизацией, да и код получится куда проще.



Страницы: 1 вся ветка

Текущий архив: 2006.08.06;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.054 c
2-1152645349
parovoZZ
2006-07-11 23:15
2006.08.06
Модальное окно закрывается со второго раза


2-1153297058
Интересующийся
2006-07-19 12:17
2006.08.06
Чужая форма и управление ее элементами по их имени


2-1153426580
Батыр
2006-07-21 00:16
2006.08.06
Текстовый Массив


2-1152176819
Crazy monkey
2006-07-06 13:06
2006.08.06
Как перенести данные из одной таблицы в другую


2-1153302482
IceBeerg
2006-07-19 13:48
2006.08.06
Передача данных из одной программы в другую через указатели