Einzelnen Beitrag anzeigen

moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

Daten aus Thread an Anwendung übergeben

  Alt 27. Nov 2008, 12:17
Moin !

Ich habe da gerade folgendes Konstrukt:
Delphi-Quellcode:
procedure TPipeServer.Execute;
var
  I, Written: Cardinal;
  InMsg, OutMsg: RPIPEMessage;
begin
  while not Terminated do
  begin
    if FHandle = INVALID_HANDLE_VALUE then
    begin
      // suspend thread for 250 milliseconds and try again
      Sleep(250);
    end else begin
      if ConnectNamedPipe(FHandle, nil) then
      try
        // read data from pipe
        InMsg.Size := SizeOf(InMsg);
        ReadFile(FHandle, InMsg, InMsg.Size, InMsg.Size, nil);
        if
          (InMsg.Kind = 0) and
          (StrPas(InMsg.Data) = cShutDownMsg + FPipeName)
        then
        begin
          // process shut down
          OutMsg.Kind := 0;
          OutMsg.Count := 3;
          OutMsg.Data := 'OK'#0;
          Terminate;
        end else begin
          // data send to pipe should be processed here
          OutMsg := InMsg;
          // we'll just reverse the data sent, byte-by-byte
          Data := InMsg.Data;
          MainForm.ProcessCommand(Data);
          //for I := 0 to Pred(InMsg.Count) do
          // OutMsg.Data[Pred(InMsg.Count) - I] := InMsg.Data[I];
          OutMsg.Data := 'OK';
        end;
        CalcMsgSize(OutMsg);
        WriteFile(FHandle, OutMsg, OutMsg.Size, Written, nil);
      finally
        DisconnectNamedPipe(FHandle);
      end;
    end;
  end;
end;
Das ist ein Teil der Pipe Demo von hier: http://www.delphi3000.com/articles/article_2918.asp?SK=

Das funzt auch alles ganz prächtig und auch die Pipe klappt. Aber wie kriege ich jetzt die Daten die ich per Pipe gesendet habe in meine Hauptanwendung?

Im Code gibt es die Stelle "Data := InMsg.Data;". Data ist mal nur ein String.
So ich steck da aber noch mitten in dem Thread drin. Wenn ich nun die Daten an meine Hauptanwendung übergeben lasse (mittels MainForm.ProcessCommand(Data); ) und dort z.B. versuche ein MDI Child zu erzeugen, dann hängt die Anwendung.
Hintergrund: Ich will über die Pipe Commands senden können welche dann in der Hauptanwendung bestimmte Reaktionen hervorufen.

Kann mir jemand nen Tip geben wie ich nun die Daten aus dem Thread in meine Hauptanwendung bekomme und die dort verarbeiten kann?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat