Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Остановка потока [D7, XP]


Страницы:   1 2

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]

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо