Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.5 MB
Время: 0.028 c
15-1151995532
Greka
2006-07-04 10:45
2006.08.06
Посоветуйте конфигурацию компьютера


15-1152527832
tsa
2006-07-10 14:37
2006.08.06
Скажите самое странное, куда Вы прикладывались.


3-1149247881
Iehbr
2006-06-02 15:31
2006.08.06
Не происходит удаление в базе данных ACCESS


4-1145025162
SMAC
2006-04-14 18:32
2006.08.06
Print emul


15-1152088865
Zvrb
2006-07-05 12:41
2006.08.06
Преобразования десятичного числа в шестнадцатиричное в Excel 2003




   Наверх