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

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

TThread


Страницы:   1 2

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.


Страницы:   1 2

Наверх

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