Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.18;
Скачать: CL | DM;

Вниз

Метод Terminate в дополнительного потока   Найти похожие ветки 

 
Андрей Пл   (2007-08-29 15:08) [0]

У меня есть поток который в цикле что то делает скажите
всегда ли надо в цыкле проверять свойство Terminated потока завершения потока?
или достаточно в основной программе вызвать метод Terminate и поток сам завершиться?
Заранее спасибо.


 
Reindeer Moss Eater ©   (2007-08-29 15:10) [1]

А ты код посмотри. Что именно делает вызов Terminate. И сразу поймешь, завершится поток сам по себе или нет.


 
Сергей М. ©   (2007-08-29 15:18) [2]


> всегда ли надо в цыкле проверять свойство Terminated


Не всегда.
Но это вряд ли твой случай.


 
Юрий Зотов ©   (2007-08-29 15:30) [3]

> Андрей Пл   (29.08.07 15:08)  

Метод Terminate просто устанавливает свойство Terminated и больше ничего не делает. Остсюда вывод: если в основной программе вызвать метод Terminate, то поток сам по себе НЕ завершится. Нужно в методе Execute проверять свойство Terminated и если оно True, то выходить из метода. Это и будет завершением потока.


 
Андрей Пл   (2007-08-29 15:37) [4]

ясно надо ставить что то типа:
 while not Terminated do
 begin
    ...

 end;


если ошибаюсь поправте!!!

Еще вопрос в дополнительном потоке у меня идет работа с СОМ портом который был открыт из основной программы. При желании я хочу прекратить работу потока и закрыть порт. Вопрос как мне из основного потока узнать что поток уже завершился ведь в промежутке выполнения команд

 varThreardOpros.Terminate;
 KillComm;

поток может еще не завершиться т.е

может еще выполняться команды в цыкле

 while not Terminated do
 begin
    ... //т.е вот те команды что сдесь!!!

 end;


 
Reindeer Moss Eater ©   (2007-08-29 15:39) [5]

При выходе из Execute оповести главный поток и все.


 
Андрей Пл   (2007-08-29 15:39) [6]

т.е у меня возникает такая ситуация метод Terminate после него закрыл сразу порт процедурой KillComm а в цыкле доп. потока идет еще работа с портом!


 
Reindeer Moss Eater ©   (2007-08-29 15:41) [7]

Ну так прекращай ее и делай брейк из цикла


 
Anatoly Podgoretsky ©   (2007-08-29 15:41) [8]

> Андрей Пл  (29.08.2007 15:37:04)  [4]

if Terminated или перед/после выхода из цикла, порт желательно закрывать, а не расчитывать на систему.


 
Reindeer Moss Eater ©   (2007-08-29 15:43) [9]

Он его открыл в главном потоке. Лучше бы и закрывать там же.
Хотя конечно все равно.


 
Андрей Пл   (2007-08-29 15:43) [10]

>Reindeer Moss Eater ©   (29.08.07 15:39) [5]
>При выходе из Execute оповести главный поток и все.

ты имееш ввиду при помощи сообщений (ну это время вспоминать работу с ними)


 
Сергей М. ©   (2007-08-29 15:43) [11]

varThreardOpros.Terminate; //команда потоку закругляться по хозяйству
varThreardOpros.WaitFor; //ждем собственно закругления
KillComm; //теперь можно спокойно килить ресурс


 
Reindeer Moss Eater ©   (2007-08-29 15:44) [12]

ты имееш ввиду при помощи сообщений (ну это время вспоминать работу с ними)

Это уж от личных сексуальных пристрастий зависит.
Можно сообщениями, можно callback, можно по всякому....


 
Anatoly Podgoretsky ©   (2007-08-29 15:50) [13]

> Reindeer Moss Eater  (29.08.2007 15:43:09)  [9]

Для главного потока есть обработчик, вроде OnTerminate или как то подобно.


 
Андрей Пл   (2007-08-29 16:04) [14]

Всем спасибо

varThreardOpros.Terminate; //команда потоку закругляться по хозяйству
varThreardOpros.WaitFor; //ждем собственно закругления
KillComm; //теперь можно спокойно килить ресурс


то что было нкжно!!!


 
Сергей М. ©   (2007-08-29 16:05) [15]


> то что было нкжно


Только не вздумай при этом устанавливать св-во FreeOnTerminate = True - грабли получишь)


 
Германн ©   (2007-08-29 16:10) [16]


> Сергей М. ©   (29.08.07 16:05) [15]
>
>
> > то что было нкжно
>
>
> Только не вздумай при этом устанавливать св-во FreeOnTerminate
> = True - грабли получишь)
>

Тут и без этого на каждом шагу могут появиться грабли.


 
Сергей М. ©   (2007-08-29 16:12) [17]


> Германн ©   (29.08.07 16:10) [16]


Но эти грабли одни из самых больнобьющих)


 
evvcom ©   (2007-08-29 16:59) [18]


> ты имееш ввиду при помощи сообщений (ну это время вспоминать
> работу с ними)

Ну так хороший повод для того, чтобы заполнить пробел в твоей памяти :)

И в догонку опять же для заполнения пробела: слово "цикл" пишется через "и"



Страницы: 1 вся ветка

Текущий архив: 2007.11.18;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
15-1191311482
Константин Коваленко
2007-10-02 11:51
2007.11.18
Вакансия: программист Delphi + SQL (Днепропетровск, $800)


15-1192094854
Prohodil Mimo
2007-10-11 13:27
2007.11.18
Как зайти в меню DSL-модема?


2-1193378020
DevilDevil
2007-10-26 09:53
2007.11.18
TButton и WordWrap


2-1193043715
Sergl
2007-10-22 13:01
2007.11.18
Сокеты "сдохли"


15-1192448141
alshtam
2007-10-15 15:35
2007.11.18
прозрачная шифрация