Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Methode wird Thread übergeben. Thread startet methode + var (https://www.delphipraxis.net/122023-methode-wird-thread-uebergeben-thread-startet-methode-var.html)

Jackie1983 8. Okt 2008 11:22


Methode wird Thread übergeben. Thread startet methode + var
 
hi,

aus meiner Hauptanwendung erstelle und starte ich einen Thread. Der Thread startet wieder einen Thread.
Aus der Hauptanwendung übergebe ich Thread1 die Methode. Thread1 übergibt diese Methode Thread2. Thread2 speichert diese in eine Variable.

Beim Aufruf der Methode aus Thread2 kommt es zum Fehler, also muss ich die Methode synchronisieren. Da ich aber Variablen übergeben muss, wie kann ich das machen? Habe da was gefunden
Delphi-Quellcode:
//http://www.dev-center.de/index.php?cat=tutorials&file=multithreading
type
  TBinFertig = procedure(const Content: String) of object;

  TMyOwnThread = class(TThread)
  private
    FBinFertig: TBinFertig;
    procedure SyncBinFertig;
  public
    property BinFertig: TBinFertig read FBinFertig write FBinFertig;
  end;

implementation

procedure TMyOwnThread.SyncBinFertig;
begin
  if Assigned(FBinFertig)
    then FBinFertig(DasIstDerInhaltDerWebseite);
end;

procedure TMyOwnThread.Execute;
begin
  try
    // Download der Seite ...

    // Synchronisieren
    Synchronize(SyncBinFertig);
  except
    on e: exception do begin
      // mache hier irgendetwas mit dem Fehler.
    end;
  end;
end;
Nur brauche ich dann gobale Variablen im Thread und das möchte ich vermeiden. Hat jemand eine andere Idee?

Jackie1983 8. Okt 2008 11:29

Re: Methode wird Thread übergeben. Thread startet methode +
 
habe es zur zeit mit zwei globalen Variablen gelöst, wenn einer eine bessere Idee hat dann her damit :)
Delphi-Quellcode:
  TJobThread = class(TThread)
  private
    fTestCmd : TCommandHandling;
    fTestSocket : TCustomWinSocket;
  ...
    Procedure SyncOutputJob;
  ...
  end;


procedure TJobThread.SyncOutputJob;
begin
  if Assigned(fProcCommand) then
    fProcCommand(fTestSocket,fTestCmd);
end;

procedure TDTSJobThread.Execute;
begin
  inherited;
...
        fTestCmd := cmd;
        fTestSocket := TCustomWinSocket(fJobList.Objects[0]);
        Synchronize(SyncOutputJob);
...
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 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