ich habe gerade 'ne Miese Internetverbindung und kann nicht richtig recherchieren.
Wie schaffe ich es, an bestimmten Stellen auf einen TThread zu warten? Schematisch folgender Code funktioniert nicht:
Code: Alles auswählen
// Mainthread
var ready : Boolean = false;
startSecondThread;
while (not ready) do sleep(10);
procedure onEvent;
begin
if (lastEvent = 'ready') then ready := true;
end;
// Second Thread
... do something...
lastEvent := 'Ein bestimmter Status';
Synchronize(@onEvent);
... do something...
lastEvent := 'ready';
Synchronize(@onEvent);

Synchronize einfach nicht benutzen und ready := true; direkt in den zweiten Thread zu schreiben ist keine Option, da in 99% der Fälle die Asynchronität über das Synchronize erwünscht ist. Andernfalls müsste ich im Hauptthread ständig Polling betreiben, um eventuelle Statusmeldungen zu bekommen.
Bevor man in die wait-Schleife geht eine Art dontSynchronizeFlag auf true setzen, funktioniert auch nicht zuverlässig.
Was ist die gängige Lösung, wenn man asynchron mit Synchronize arbeiten möchte, aber manchmal auf den Thread warten muss?