Einzelnen Beitrag anzeigen

oXmoX

Registriert seit: 8. Jun 2005
85 Beiträge
 
#1

Synchronisierung asynchroner Kommunikation über Messages

  Alt 4. Feb 2006, 12:25
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?
  Mit Zitat antworten Zitat