AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Daten aus Thread an Anwendung übergeben

Daten aus Thread an Anwendung übergeben

Ein Thema von moelski · begonnen am 27. Nov 2008 · letzter Beitrag vom 27. Nov 2008
Antwort Antwort
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
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Daten aus Thread an Anwendung übergeben

  Alt 27. Nov 2008, 14:32
  1. Terminate solltest/brauchst du nicht im Thread aufrufen. Ein Exit reicht hier auch bzw. einfach die Methode Execute beenden.
  2. Das Kommando Mainform.Processcommand legst du in eine extra Methode (ohne Parameter) und rufst dann synchronize(Methode) in execute auf.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
moelski

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

Re: Daten aus Thread an Anwendung übergeben

  Alt 27. Nov 2008, 15:06
Danke nun tut das so wie ich es haben wollte.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz