Es gibt zwei Verfahren, A1 und A2, die beide Anruffunktion B in ihrem Code:Was ist der beste Weg, eine Prozedur "verzögert" zu nennen?
function B: boolean;
begin
// do other stuff
end;
procedure A1;
begin
// do stuff
if b then
...
// do stuff
end;
procedure A2;
begin
// do stuff
if b then
A1; // <- how to call A1 "delayed"?
// do stuff
end;
Wenn die Bedingung in A2 wahr ist, Verfahren A1 genannt werden müssen, aber das würde passieren, während A2 noch läuft was ich nicht will.
Was passiert ist: Wenn die Bedingung in A2 wahr ist, dann sollte A2 beendet sein und nach Verlassen von A2 sollte die Prozedur A1 aufgerufen werden.
Eine hässliche Lösung wäre, einen Timer zu setzen, der A1 nach einer Verzögerung aufruft, die sicherstellt, dass A2 beendet ist.
Aber es muss bessere Wege geben, oder?
BEARBEITEN: A1 und A2 sind in meinem Fall Ereignisse, also werden sie nicht per Code aufgerufen und ich kann A1 nicht einfach von einer aufrufenden Prozedur aufrufen, nachdem A2 beendet ist.
geprüft Ich glaube nicht, gäbe es eine Race-Bedingung sein. PostMessage ist der Weg zu gehen. Die Nachrichtenwarteschlange wird verarbeitet, sobald der A2-Ereignishandler abgeschlossen ist oder ein manueller Aufruf an Application.ProcessMessags erfolgt. –