Форум: "Основная";
Текущий архив: 2007.11.18;
Скачать: [xml.tar.bz2];
ВнизМетод 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.045 c