![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Остановка потока [D7, XP]
Fr © (2010-08-30 18:10:00)Как правильно остановить поток? Создается при коннекте к ServerSocket и с периодичностью ~30с делает что-то. Как правильно завершить его работу посередине засыпания (когда ClientSocket.Active уже false, а Sleep(30000) только начал выполняться)?
procedure T...Thread.Execute;
...
begin
while ...ClientSocket.Active do begin
...
Synchronize(...);
Sleep(30000);
end;
end;
Fr (2010-09-02 23:14:00) [1]
> Сергей М. © (02.09.10 11:55) [31]
спасибо
Сергей М. (2010-09-02 12:04:00) [2]
> вот такая не справедливость
Вопиющая !
К ногтю Борланд и прочие эмбаркадеры !
Скольким выдающимся кодерам они жизнь попортили, у скольких кровушку попили ..
)
brother (2010-09-02 12:00:00) [3]> обращения в доп.потоке к визуальным VCL-контролам недопустимы
вот такая не справедливость)
Сергей М. (2010-09-02 11:55:00) [4]
> Fr (02.09.10 11:07) [30]
Правило одно, безотносительно "секций", - обращения в доп.потоке к визуальным VCL-контролам недопустимы.
Fr (2010-09-02 11:07:00) [5]Т.е. в секцию
except
end;
надо опять-таки выводить Synchronize и принудительный Terminate?
Anatoly Podgoretsky (2010-09-01 11:41:00) [6]Это ...StatusBar1.Panels[1].Text:='';
трудно назвать Synchronize
Fr (2010-08-31 21:58:00) [7]
> Anatoly Podgoretsky © (31.08.10 09:05) [27]
> Не забывать про Synchronize - данная программа не живая.
>
В смысле? Synchronize есть - см.:
> Fr (30.08.10 19:39) [13]
Anatoly Podgoretsky (2010-08-31 09:05:00) [8]Не забывать про Synchronize - данная программа не живая.
Fr (2010-08-30 22:53:00) [9]
> Сергей М. © (30.08.10 22:41) [25]
Ну, значит я опять не точно выразился ....
Сергей М. (2010-08-30 22:41:00) [10]
>в приведенных кусках кода видно, что это клиент, а не
> сервер while ...ClientSocket.Active
>
Ни разу не видно.
Фигурирующий в твоем коде ClientSocket вполне можно интерпретировать как свойство объекта класса TServerClientThread.
А то что ты написал Execute, а не ClientExecute, вполне можно отнести к вольному сокращению текста в надежде что тебя поймут.
Вот как ты написал - так тебя и поняли.
Я еще в [9] вел речь о TServerClientThread, а ты только к [21] соизволил уточнить, что , оказывается, TServerSocket тут никаким боком не касается твоей "проблемы")
Сергей М. (2010-08-30 22:33:00) [11]
> На мой взгляд, фраза "при коннекте K SeverSocket" означает
> событие OnConnect на клиенте
А на мой - ни разу не означает.
ServerSocket упомянут всуе. Ибо ClientSocket'у фиолетово к кому он коннектится.
Fr (2010-08-30 22:31:00) [12]
> Сергей М. © (30.08.10 22:16) [22]
На мой взгляд, фраза "при коннекте KSeverSocket" означает событие OnConnect на клиенте... До и в приведенных кусках кода видно, что это клиент, а не серверwhile ...ClientSocket.Active
:)
Сергей М. (2010-08-30 22:16:00) [13]
> А я и не говорил про TServerSocket
Угу.
Это я придумал.
Цитирую тебя:
> поток.. Создается при коннекте к ServerSocket
Будешь дальше упираться ?)
Fr (2010-08-30 22:09:00) [14]
> Сергей М. © (30.08.10 21:30) [18]
> ...если в справке к компоненту TServerSocket в описании события
> OnGetThread...
А я и не говорил про TServerSocket. У меня на форме лежит Client ...
Сергей М. (2010-08-30 22:06:00) [15]Мдя ..
Кругом цветет сплошной цурюк)
sniknik (2010-08-30 21:58:00) [16]вот ведь какие "полезные" пузырьки, весь вечер "проговорили" и оказалось ни о чем... партизанен капут, сдавайся! :)
Сергей М. (2010-08-30 21:30:00) [17]
> Fr (30.08.10 19:39) [13]
>
> Нет, я создал потомка от TThread:
Ну и за каким чертом ты его создавал, если в справке к компоненту TServerSocket в описании события OnGetThread черным по белому сказано, что создавать (если оно действительно необходимо) следует потомка TServerClientThread и, соответственно, реализовать перекрытый его метод ClientExecute ?
DVM (2010-08-30 20:26:00) [18]
> "волшебные пузырьки" - это название основной формы, на которой
> лежит TIdIcmpClient и TClientSocket
Создавай их в рантайм в теле Execute и там же уничтожай. Или сделай полями класса своего TLagThread и создавай в конструкторе, а уничтожай в деструкторе. А то получается что у тебя несколько потоков одновременно имеют доступ к одним и тем же TIdIcmpClient, что чревато
Fr (2010-08-30 20:15:00) [19]
> sniknik © (30.08.10 20:08) [15]
"волшебные пузырьки" - это название основной формы, на которой лежит TIdIcmpClient и TClientSocket
А что там за проблемы еще могут быть? Просветите, плиз.
sniknik (2010-08-30 20:08:00) [20]смущают меня "волшебные пузырьки" перед именами компонент... а уж учитывая что в описании класса потока ничего похожего нет сдается, что уничтожение потока это не самая главная твоя проблема.