if Terminated then Exit;elle se fermera qu'à la fin des 10sec. de l'intervalle, puisque la méthode Sleep est une méthode bloquante pour le Thread qui l'exécute.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionunit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, SyncObjs, ExtCtrls; type TForm1 = class(TForm) Button2: TButton; Button3: TButton; Label1: TLabel; Label2: TLabel; Button1: TButton; Button4: TButton; Button5: TButton; CheckBox1: TCheckBox; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; Button10: TButton; Button11: TButton; Bevel1: TBevel; Bevel2: TBevel; Bevel3: TBevel; procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure Button11Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation uses UnitMyThread_2, UnitMyThread_3, UnitMyThread_1, UnitMyThread_4, UnitMyThread_5, UnitMyThread_6, UnitMyThread_7, UnitSemaphoreForm, UnitMyThread_8; {$R *.dfm} procedure TForm1.Button2Click(Sender: TObject); var MyThread_2: TMyThread_2; begin MyThread_2 := TMyThread_2.Create(Label1); end; procedure TForm1.Button3Click(Sender: TObject); var MyThread_2b: TMyThread_2; begin MyThread_2b := TMyThread_2.Create(Label2); end; procedure TForm1.Button1Click(Sender: TObject); var MyThread_1: TMyThread_1; begin MyThread_1 := TMyThread_1.Create(False); end; procedure TForm1.Button4Click(Sender: TObject); var MyThread_3: TMyThread_3; begin MyThread_3 := TMyThread_3.Create(False); end; procedure TForm1.Button5Click(Sender: TObject); var MyThread_4: TMyThread_4; begin MyThread_4 := TMyThread_4.Create(False); repeat // boucle vide pour attendre la fin du thread Application.ProcessMessages; until MyThread_4.ThreadTerminated; MessageBox(Handle, 'Le thread est terminé', 'Avertissement', MB_OK); end; procedure TForm1.Button6Click(Sender: TObject); var MyThread_4: TMyThread_4; begin MyThread_4 := TMyThread_4.Create(False); repeat Application.ProcessMessages; MyThread_4.Suspended := checkBox1.Checked; until MyThread_4.ThreadTerminated; MessageBox(Handle, 'Le thread est terminé', 'Avertissement', MB_OK); end; procedure TForm1.Button7Click(Sender: TObject); var MyThread_Faible: TMyThread_5; MyThread_Prioritaire: TMyThread_5; begin MyThread_Faible := TMyThread_5.Create(False, 'Faible'); MyThread_Faible.Priority := tpIdle; Sleep(500); MyThread_Prioritaire := TMyThread_5.Create(False, 'Prioritaire'); MyThread_Prioritaire.Priority := tpTimeCritical; end; procedure TForm1.Button8Click(Sender: TObject); var Thread_1: TMyThread_6; Thread_2: TMyThread_6; Mutex: THandle; begin Mutex := CreateMutex(nil, False, 'MyMutex'); Thread_1 := TMyThread_6.Create(False, 'Thread_1'); Thread_2 := TMyThread_6.Create(False, 'Thread_2'); CloseHandle(Mutex); end; procedure TForm1.Button9Click(Sender: TObject); var SemaphoreForm: TSemaphoreForm; Thread_1: TMyThread_7; Thread_2: TMyThread_7; Thread_3: TMyThread_7; Semaphore: THandle; begin SemaphoreForm := TSemaphoreForm.Create(Application); SemaphoreForm.Show; Semaphore := CreateSemaphore(nil, 1, 1, 'MySemaphore'); Thread_1 := TMyThread_7.Create(False, 'Thread_1', SemaphoreForm); Thread_2 := TMyThread_7.Create(False, 'Thread_2', SemaphoreForm); Thread_3 := TMyThread_7.Create(False, 'Thread_3', SemaphoreForm); CloseHandle(Semaphore); end; procedure TForm1.Button10Click(Sender: TObject); var Thread_1: TMyThread_8; Thread_2: TMyThread_8; Thread_3: TMyThread_8; begin Thread_1 := TMyThread_8.Create(False, 'Thread_1'); Thread_2 := TMyThread_8.Create(False, 'Thread_2'); Thread_3 := TMyThread_8.Create(False, 'Thread_3'); end; procedure TForm1.Button11Click(Sender: TObject); var Event: TEvent; begin Event := TEvent.Create(nil, False, False, 'MyEvent'); Event.SetEvent; end; end.
procedure TMyThread.Execute; var I, V : Integer; begin while not Terminated do begin V := Interval div 100; Synchronize(frmThreadTest.UpdateShape); for I := 0 to 100 do begin if Terminated then Exit; Sleep(V); end; end; end;
procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if Assigned(MyThread1) then if not MyThread1.Terminated then MyThread1.Terminate; if Assigned(MyThread2) then if not MyThread2.Terminated then MyThread2.Terminate; end;