Bei Logs finde ich eine asynchrone Lösung sinnvoller. Das heißt ich nehme einen Thread, der nur die Logs schreibt und synchronisiere in irgendeiner Form mit diesem Thread um die Daten asynchron dort hineinzupacken.
Zum Beispiel mit TThread.Queue(LogThread, ...) oder indem Windows Messages geschickt werden oder...
Das hat den Vorteil, dass die sendenden Threads nicht blockiert werden.
Ob TCriticalSection oder direkt die
API-Funktionen macht vom Ergebnis her keinen Unterschied, da TCriticalSection diese nur kapselt. Allerdings ist es natürlich sinnvoll TCriticalSection zu verwenden um für andere Betriebssysteme gerüstet zu sein.
Der Quelltext wie er jetzt ist sieht aber eigentlich korrekt aus.