Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];

Вниз

Как узнать вне 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.011 c
1-1151042414
Shlomo
2006-06-23 10:00
2006.08.06
Delphi 2005 и Quick Report?


9-1132529436
Антибаг
2005-11-21 02:30
2006.08.06
Ньюсгруппа GLScene повисла что ли?


2-1153067292
kaif
2006-07-16 20:28
2006.08.06
Хочу покаяться за то, что наговорил про генераторы в триггерах


2-1153383082
Pups
2006-07-20 12:11
2006.08.06
Подскажите по классам!!!


6-1143027284
Dysan
2006-03-22 14:34
2006.08.06
длина строки с параметрами в TidHttp





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский