Hi,
ich versuche gerade zwei Fenster, die über Messages miteinander kommunizieren, zu synchronisieren. Damit meine ich folgendes: Meine Anwendung schickt die Message "GET CALL xx PARTNER_HANDLE" an die andere Anwendung und diese sendet darauf (asynchron) die Antwort "CALL xx PARTNER_HANDLE yyyyyyy". Mein Problem besteht nun darin, eine Funktion
function GetPartnerhandle(Call: Integer): String
zu bauen, die synchron ein Ergebnis zurückliefert. Die Funktion müsste also so lange warten, bis das Ergebnis vorliegt.
Hier ist mal mein Idee:
Delphi-Quellcode:
function MyClass.GetPartnerhandle(Call: Integer): String;
begin
// SendMsg sendet die Message an die andere Anwendung.
Self.SendMsg('GET CALL ' + IntToStr(Call) + ' PARTNER_HANDLE');
repeat
Sleep(50);
Application.ProcessMessages;
// LastMsg ist eine String-Variable, die immer die zuletzt erhaltene Message enthält.
until (Pos('CALL ' + IntToStr(Call) + ' PARTNER_HANDLE', Self.LastMsg) > 0) or Application.Terminated;
Result := Copy(Self.LastMsg, Pos('PARTNER_HANDLE', Self.LastMsg) + 15, 255);
end;
Leider bleibt meine Anwendung offenbar in der repeat-Schleife stecken, d.h. die Abbruchbedingung tritt nie ein. Mit anderen Worten: die Variable LastMsg, die sonst immer die zuletzt erheltene Message enthält, bleibt unverändert und daraus schließe ich, dass die Messages trotz "Application.ProcessMessages;" nicht mehr verarbeitet werden. ...warum nur?