![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день, как бы бессмыслено не звучало, но мне нужно сделать запуск потоков по очереди. (их около 10)
Потоки создавал через file>new>other>thread object На форме кнопка с кодом: Код:
var p1:p1_pot; p2:p2_pot; begin repeat begin p1:=p1.Create(true); p1.FreeOnTerminate:=true; p1.Resume; p1.Priority:=tpnormal; end; begin p2:=p2.Create(true); p2.FreeOnTerminate:=true; p2.Resume; p2.Priority:=tpnormal; end; //и т.д. until stop=1; end; Так вот, как можно сделать, что бы при нажатии на кнопку запускался первый поток, после его завершения, запускался второй, после завершения второго - третий и т.д.? |
|
#2
|
||||
|
||||
|
WaitFor у TThread. FreeOnTerminate в false и удалять объект руками.
хотя в этом случае много потоков необязательно. можно все действия всех потоков выполнять в одном. тогда и очередь сама собой получится. |
|
#3
|
||||
|
||||
|
А можно в каждом потоке стартовать следующий перед завершением текущего. Хотя задача и правда бессмысленна по своей сути. В таких случаях куда менее накладно по ресурсам обработать в одном потоке.
|
|
#4
|
||||
|
||||
|
я когда-то делал очередь потоков, чтобы исполнять их именно по очереди.
Код:
type
TThreadQueue = class(TObjectQueue)
private
FInProgress: Boolean;
FCurrentThread: TThread;
procedure OnThreadTerminate(Sender: TObject);
public
constructor Create;
destructor Destroy; override;
procedure ExecuteThreads;
procedure TerminateCurrentThread;
procedure TerminateAllThreads;
property InProgress: Boolean read FInProgress;
property CurrentThread: TThread read FCurrentThread;
end; |
|
#5
|
||||
|
||||
|
Цитата:
|