Critical Sections verhindern, daß 2 Tasks quasi gleichzeitig in ein und demselben Stück Code arbeiten.Mit EnterCriticalSection(...) oder TryEnterCriticalSection(...) forderst Du Zugriff auf eine Critical Section an. Wenn sie belegt ist, wartet die Funktion EnterCriticalSection(...), bis sie wieder frei ist. TryEnterCriticalSection(...) gibt in diesem Fall FALSE zurück.
Aber nochmal: Ich denke, es ist einfacher, wenn Du mit SendMessage(...) oder PostMessage(...) eine selbstdefinierte Nachricht an Dein Ausgabefenster schickst. dort mußt Du sie dann nur noch in der Nachrichtenbehandlung abfangen und entsprechend auswerten. Dü bräuchtest natürlich in Deinen Threads das Handle auf das Ausgabefenster.