====== TThread ====== ===== Titre ===== ==== Code du Thread ==== { 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; ==== Appel depuis l'application ==== FThread := TMyThread.Create(True); // Create Suspended FThread.OnTerminate:=@ReceptThreadTerminate; FThread.Start; // et non pas Execute ! ==== A Savoir... ==== 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... ===== TThreadList : Partage de TList entre Threads ===== Avec TThreadList -> [[https://www.freepascal.org/docs-html/rtl/classes/tthreadlist.html]] ====== Sources & Ressources ====== * [[https://forum.lazarus.freepascal.org/index.php?topic=42198.0|Discussion sur : How to terminate the thread correctly?]] * [[https://www.freepascal.org/~michael/articles/lazthread/lazthread.pdf|PDF : Introduction to thread programming in Lazarus]]