Delphi TThread Synchronization

Come eseguire un metodo all’interno di un TThread in modo sincrono con il Thread principale dell’applicazione è abbastanza semplice.
Supponiamo di voler syncronizzare l’accesso ad una variabile di conteggio, possiamo usare i metodi TThread.Synchronize e TThread.Queue.
Il metodo TThread.Syncronize esegue immediatamente il metodo interrompendo immediatamente l’esecuzione del Thread principale mente il metodo TThread.Queue dovrebbe fare una cosa più soft gestendo una coda di metodi in esecuzione.
Bisogna però prestare attenzione se si utilizzano TThread.Syncronize e TThread.Queue all’interno di una applicazione di tipo console “” e introdurre un loop con la chiamata al metodo CheckSynchronize(100) per dire al Thread principale di eseguire i metodi in coda.
Il metodo CheckSynchronize(100) è presente nella unit System.Classes che deve essere inclusa nel progetto.
1 2 3 4 5 6 7 8 9 10 |
while not Termina do begin try CheckSynchronize(100); // sleep(1000); except on e: exception do WriteLn(e.ClassName, ': ', e.Message); end; end; |