|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Завершение нескольких потоков Tthread
Не знаю как правильно завершить созданные потоки.
Вот код в котором при нажатии кнопки Button1 создается три потока. Основной поток Код:
uses th; procedure TFormMain.Button1Click(Sender: TObject); var th: array[0..2] of ThMy; I: Integer; begin for I := 0 to 2 do begin th[i]:= ThMy.Create(true); th[i].FreeOnTerminate:= false; th[i].Priority:= tpNormal; th[i].Start; end; end; А вот собственно сам поток TThread Код:
type ThMy = class(TThread) private Msg: string; procedure ShowMsg; protected procedure Execute; override; end; implementation uses Unit1; procedure ThMy.Execute; var i: Integer; begin while not Terminated do begin Inc(i); Sleep(10); end; end; После запуска потока цикл while ожидает Terminated но вот как его послать и при том, что потока 3. Вот собственно хочу завершить не все потоки сразу, а выборочно какой-либо из них. Буду бдагодарен за любую помощь. |
#2
|
|||
|
|||
Можно сделать так:
Код:
type ThMy = class(TThread) private Msg: string; procedure ShowMsg; protected procedure Execute; override; end; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } th: array[0..2] of ThMy; end; var Form1: TForm1; implementation {$R *.dfm} procedure ThMy.Execute; var i: Integer; begin while not Terminated do begin Inc(i); Sleep(10); end; Synchronize(ShowMsg); end; procedure ThMy.ShowMsg; begin ShowMessage('конец'); end; procedure TForm1.Button1Click(Sender: TObject); var I: Integer; begin for I := 0 to 2 do begin th[i]:= ThMy.Create(true); th[i].FreeOnTerminate:= false; th[i].Priority:= tpNormal; th[i].Resume; end; end; procedure TForm1.Button2Click(Sender: TObject); begin if not Assigned(th[0]) then ShowMessage('нет потока 0') else begin th[0].Terminate; th[0]:= nil; end; end; |