{ TMyThread } procedure TMyThread.Execute; begin {... fait quelque chose dans un thread ...} Synchronize(@SynchroEnum); // Appel une procedure synchronisée avec le thread principal end; procedure TMyThread.SynchroEnum; begin {... Fait quelque chose synchronisé avec le thread principal ...} end; constructor TMyThread.Create(CreateSuspended: boolean); begin FreeOnTerminate := True; inherited Create(CreateSuspended); end;
FThread := TMyThread.Create(True); // Create Suspended FThread.OnTerminate:=@ReceptThreadTerminate; FThread.Start; // et non pas Execute !
On appel pas directement Execute
mais on démarre le Thread avec Start
.
On appel les méthodes “synchronisée” avec Synchronize(@MaProcedure)
. Donc il ne peut pas y avoir de paramètres a ces procédures…
Avec TThreadList → https://www.freepascal.org/docs-html/rtl/classes/tthreadlist.html