Direi che sono stati forniti già ottimi suggerimenti, quindi aggiungo solo un paio di considerazioni al problema.
La protezione del codice nella critical section va fatta usando try...finally:
Questo garantisce che l'oggetto venga rilasciato anche in caso di errori, impedendo un "deadlock" dell'applicazione.codice:EnterCriticalSection(TCSLog); try ... ... finally LeaveCriticalSection(TCSLog); end;
In merito al problema specifico, credo che ci sia da indagare maggiormente sulle operazioni svolte dal programma per saperne di più: il ritardo potrebbe essere dovuto a qualcosa che non è strettamente legato al multithreading.
Ciao!![]()