Via Cà Matta 2 - Peschiera Borromeo (MI)
+39 02 00704272
info@synaptica.info

Delphi TThread Synchronization

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.

 

Esiste inoltre una variabile di ambiente, “WakeMainThread” di tipo “TNotifyEvent” che può essere usata allo scopo di gestire il loop di CheckSynchronize. 

Indiscutibilmente prediligo l’utilizzo di TCriticalSection con i lock per gestire i metodi dei thread da sincare, ma quando dobbiamo importare tonnellate di librerie in un applicazione console, non si sa mai che ci sia qulche TThread.synchronize nascosto chissà dove pronto a non funzionare :-).