Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Werte übergeben aus einem 2. Thread (https://www.delphipraxis.net/84108-werte-uebergeben-aus-einem-2-thread.html)

Pfoto 11. Jan 2007 15:17

Re: Werte übergeben aus einem 2. Thread
 
Letztendlich müsste das so funktionieren:

Delphi-Quellcode:

procedure TmyThread.DoSynchronizeCommandEvent
begin
  { Hier das für die Anwendung bestimmte Event aufrufen }
  fCurrentCommand.Event;
end;

{ Hierhin wird das Event des Commands umgeleitet,
  kurz vor Ausführung des Commands muss dem Thread
  natürlich dessen Event übergeben werden }

procedure TmyThread.CommandEvent(ACommand: TCommand);
begin
  { Nun entweder hierüber das echte Event des
    Commands aufrufen, dies muss dann sychronisiert
    erfolgen... }
  Synchronize(DoSynchronizeCommandEvent);


  { ODER hier das eigene Event des Threads aufrufen,
    über dessen Parameter das aktuelle Command
    übergeben wird }
  self.RunEvent(CurrentCommand);

end;
Natürlich müsstest du bei Anwendung der ersten Methode
(Synchronize) in deinem Command bzw. Job ein zweites Event
haben,
eins für die Benachrichtigung des Threads,
ein zweites Event für die Anwendung.


Gruß

Pfoto

DelphiManiac 11. Jan 2007 18:44

Re: Werte übergeben aus einem 2. Thread
 
Hi Pfoto,

so ganz folgen kann ich dir noch nicht.
Aber dein Grundgedanke ist doch folgender

Ich sollte den ausgeführten Job (inklusive der Variablen die im Job ja gefüllt worden sind)
in meinen Hauptthread (den der GUI) übergeben.

Dann könnte ich ja prüfen welcher Job das war und anhand dessen ihn Casten, oder?
So könnte ich dann ja auf die Variablen zurückgreifen (jeder Job hat ja andere Variablen

meinst du ich könnte das dann folgendermaßen machen?
Delphi-Quellcode:
TFrmMain.GetJobFromThread(Sender:TObject; aJob:TBaseJob);
begin
  case aJob of
    TReadPresurreJob: begin
                       Self.editPressure:=IntToStr((aJob as TReadPressureJob).Pressure); // Variable auslesen und in Edit schreiben
                      end;

  ...

  end;
end; // of TFrmMain.GetJobFromThread(Sender:TObject; aJob:TBaseJob);

Pfoto 11. Jan 2007 19:23

Re: Werte übergeben aus einem 2. Thread
 
richtig verstanden!

Die von dir aufgeführte Methode entspräche der zweiten Variante,
die ich beschrieben hatte.

Den von mir beschrieben Nachteil, dass du nun nur 1 Event für
alle Commands/Jobs hast, hast du ja durch die case-Abfrage
aufgehoben.

Bei der ersteren Variante (der Thread ruft das eigene Event des
Commands auf), könntest du jedem Command eine ganz individuelle
Auswertung geben, ohne die Case-Struktur.
Was nun bequemer / sinnvoller auf Dauer ist, ist abzuwarten.


Wenn dein Code funktioniert, ist ja alles in Butter ;-)


Gruß
Pfoto

DelphiManiac 11. Jan 2007 19:42

Re: Werte übergeben aus einem 2. Thread
 
:lol: :lol:

Dann werde ich dass morgen an der Arbeit mal probieren, sage dir bescheid obs geklappt hat.

Also schönen Abend noch,
und danke euch beiden...

DelphiManiac 12. Jan 2007 09:06

Re: Werte übergeben aus einem 2. Thread
 
Hallo,

das mit dem Case hat natürlich nicht geklappt (da er ja zählbare (ordinale) Datentypen erwartet)
Aber ich habe es mit if-Abfragen erstellt und siehe da... alles klappt wunderbar :-)

Also Problem gelöst.
Danke Community!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr.
Seite 2 von 2     12   

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