![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать завершения потока? По окончанию сделать Showmessage... [D7]
mmms © (2007-02-02 10:15:00)Здравствуйте! Такое дело, есть простенький поток:
type
TGoThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;
в основной форме:
private
GT: TGoThread;
Тут же по кнопке его создаю:
GT := TGoThread.Create(False); // start
GT.FreeOnTerminate := True;
Выполняется код:
procedure TGoThread.Execute;
begin
//работа по обработке
end;
Все Ок, но вот как бы узнать окончание потока? Если Showmessage вставлю в сам поток в TGoThread.Execute, в самый конец, то сработает, но это конечно не правильно, да и Showmessage не модальное сообщение, и если на форму кликнуть, оно скроется за ней.. Вот и весь вопрос, заранее благодарю за ответ.
Kolan (2007-02-03 17:28:00) [1]«Отлаживать лучше отладчиком.»
Сразу видно что не часто ты отлаживал потоки отладчиком. Виснет так что ППЦ. Питер(кажется он) даже хитрый способ придумал для убивания среды
Аноним (2007-02-03 15:01:00) [2]
> Докажи сие удтверждение реальным примером! Тогда можно будет
> отделять "мух от котлет" и тогда можно будет спорить по
> существу !
Если я докажу релаьным примером, то есть приведу код, и опишу последовательность действий, приводящих к глюку со стопроцентной воспроизводимостью, спорить будет особо не о чем, потому что я буду просто прав и все.
Но я такой пример не приведу, ибо косяки там "плавающие" ,и зафиксировать их не так просто.
То есть спорить опять не о чем, потому что такой спор сводится к:
"глючит"
"ты врешь, не глючит"
"нет, это ты врешь, глючит"
"нет, ты врешь"
Ну и зачем такой спор нужен? Какая истина родится в нем?
Anatoly Podgoretsky (2007-02-03 10:33:00) [3]> Германн (03.02.2007 01:47:14) [14]
А чего там утверждать, так и есть
...
...
BP
...
...
при отладке будешь несколько раз попадать в BP и курсор будет дергаться по разным точкам, в зависимости от того, какой поток будет получать управление при следующим шаге.
Германн (2007-02-03 01:47:00) [4]
> Аноним (03.02.07 00:50) [13]
>
>
> > Сергей М. ©
>
>
> К сожалению, IDE ощутимо глючит при отладке отладчиком в
> случае ,если брек-поинты срабатывали в более чем одном потоке.
>
>
> поэтомму из лучше вообще не отлаживать )))
Докажи сие удтверждение реальным примером! Тогда можно будет отделять "мух от котлет" и тогда можно будет спорить по существу !
Аноним (2007-02-03 00:50:00) [5]
> Сергей М. ©
К сожалению, IDE ощутимо глючит при отладке отладчиком в случае ,если брек-поинты срабатывали в более чем одном потоке.
поэтомму из лучше вообще не отлаживать )))
Сергей М. (2007-02-02 14:28:00) [6]
> Потоки лучьше отлаживать логом.
>
Отлаживать лучше отладчиком.
А логом отлаживают лузеры)
Kolan (2007-02-02 14:02:00) [7]Потоки лучьше отлаживать логом.
Сергей М. (2007-02-02 10:38:00) [8]
> Рамиль © (02.02.07 10:32) [8]
Следует понимать суть происходящего, иначе грабли неминуемы.
Рамиль (2007-02-02 10:32:00) [9]Тем более, что
GT.FreeOnTerminate := True;
Рамиль (2007-02-02 10:32:00) [10]
> Сергей М. © (02.02.07 10:28) [7]
Сомневаюсь, что автору нужны такие тонкости.
Сергей М. (2007-02-02 10:28:00) [11]OnTerminate - это не событие завершения потока, это событие завершения выполнения метода Execute() в потоке.
Сергей М. (2007-02-02 10:24:00) [12]
> Как узнать завершения потока?
WaitForSingleObject, MsgWaitForMultipleObjects
mmms (2007-02-02 10:23:00) [13]OnTerminate
Все понял, спасибо :)
brother (2007-02-02 10:20:00) [14]а.... ну конеш на событие OnTerminate )
brother (2007-02-02 10:19:00) [15]ну пикни писи спикером на худой конец....)
этож для отладки надо? потом уберешь!)
писи спикер форева!
Рамиль (2007-02-02 10:18:00) [16]OnTerminate
Трудно справку внимательно прочитать?
JFK&MM_extramarital_son (2007-02-02 10:18:00) [17]PostMessage(SomeVCLWindowHandle,YourMessage,WParam,LParam)