![]() |
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:
Nur brauche ich dann gobale Variablen im Thread und das möchte ich vermeiden. Hat jemand eine andere Idee?
//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; |
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 12:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz