![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TThread
RASkov © (2007-02-05 03:04:00)Как правильно стартануть завершившийся но не уничтоженный поток заново?
evvcom (2007-02-06 11:57:00) [21]> [8] Leonid Troyanovsky © (06.02.07 11:30)
> борланды забыли про инициализацию в конструкторе
> FTerminated, FFinished и т.д.
А зачем их инициализировать в конструкторе? Любой объект создаваясь инициализирует все свои поля в 0, для буль это и будет False. Все логично.
> Ну, или сделать их, хотя бы, protected.
Зачем? Чтобы дать волю шаловливым ручкам? ИМХО, не стоит.
Доктор сказал в морг, значит в морг, и не фиг заниматься самолечением (c) анекдот :)
Сергей М. (2007-02-06 11:34:00) [22]
> что, все-таки, имелось ввиду в [5]....?
procedure TMyThread.Execute;
begin
..
while SomeCondition do begin
...
SomeMethodOfMyThread(SomeParams); // вот что в [5] имелось ввиду
...
end;
..
end;
Leonid Troyanovsky (2007-02-06 11:30:00) [23]
> RASkov (05.02.07 03:04)
> Как правильно стартануть завершившийся но не уничтоженный
> поток заново?
Формально должно было бы так: Thread.Create(..),
однако, борланды забыли про инициализацию в конструкторе
FTerminated, FFinished и т.д. Ну, или сделать их, хотя бы, protected.
Поэтому, как уже советовали, лучше его не завершать.
Ну, а отдыхать потоку лучше не в suspend, а в WaitFor..Object..
--
Regards, LVT.
RASkov (2007-02-06 11:20:00) [24]Я полностью согласен с [2], но что, все-таки, имелось ввиду в [5]....?
Если вызвать процедуру потока, то она выполнится в основном потоке, а не в созданном(том в котором она описана).... имхо.
evvcom (2007-02-06 09:08:00) [25]> [4] RASkov (05.02.07 22:35)
> Просто не создавать заново поток, а еще раз его стартануть
> или [2]
Именно [2]! И никаких заново стартануть. А FreeOnTerminate вообще тут не при чем.
MsGuns (2007-02-05 23:11:00) [26]ИМХО, крива сама постановка вопроса. Надо не поток стартовать, а необходимую процедуру в потоке, тогда не будет и таких извратов
RASkov (2007-02-05 22:35:00) [27]> [2] MBo © (05.02.07 05:49)
Спасибо. Наверное самое верное решение.
> [3] iXT © (05.02.07 09:20)
Так наоборот же надо - FreeOnTerminate:=False должен быть. Просто не создавать заново поток, а еще раз его стартануть или [2]
iXT (2007-02-05 09:20:00) [28]+ FreeOnTerminate:=true
MBo (2007-02-05 05:49:00) [29]Не надо доводить до завершения.
В Execute должен быть цикл while not Terminated, так вот в его конце сделать suspend, а при надобности resume
Новичек (2007-02-05 04:13:00) [30]Если экземпляр объекта TThread, то Execute.