![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
  |