![]() |
Re: mehrere funktionsparameter bei beginthread übergeben?
Zitat:
|
Re: mehrere funktionsparameter bei beginthread übergeben?
Zitat:
Delphi-Quellcode:
//Hier als Aufsatz für die Klasse TDirectory, welche (im Constrcutor) ein Verzeichnis samt Unterverzeichnisse durchforstet
//und dafür bekanntlich ein Weilchen braucht: type TSearchThread=class Constructor Create(aParent: TDirectory; const aName:String; aFileNotify:TFileNotify=nil; aOnFinished:TDirectoryNotify=nil); reintroduce; Destructor Destroy; override; private FName:string; FNotify:TFileNotify; FWnd:Hwnd; FParent:TDirectory; FThreadID:Cardinal; FonFinished:TDirectoryNotify; procedure WndProc(var Message:TMessage); procedure Notify(aFile:TFile); function ThreadProc:Integer; procedure DoNotify(aFile:TFile); end; ... constructor TSearchThread.Create(aParent:TDirectory; const aName: String; aFileNotify: TFileNotify; aOnFinished:TDirectoryNotify); begin inherited Create; FParent:=aParent; FName:=aName; FOnFinished:=aOnFinished; FNotify:=aFileNotify; Fwnd:=Classes.AllocateHWnd(WndProc); BeginThread(nil,0,@TSearchThread.ThreadProc,self,0,FThreadID); //Here you are ;-) end; destructor TSearchThread.Destroy; begin Classes.DeallocateHWnd(Fwnd); inherited; end; procedure TSearchThread.DoNotify(aFile: TFile); begin if assigned(FNotify) then FNotify(aFile); end; procedure TSearchThread.Notify(aFile: TFile); begin if assigned(FNotify) then sendmessage(Fwnd,WM_User,0,integer(aFile)); end; function TSearchThread.ThreadProc: Integer; var temp:TFileNotify; begin if assigned(FNotify) then temp:=Notify else temp:=nil; FParent.Create(FName,temp); PostMessage(Fwnd,WM_Close,0,0); result:=0; end; procedure TSearchThread.WndProc(var Message: TMessage); begin case Message.msg of WM_User: DoNotify(TFile(Message.LParam)); WM_Close: begin try if assigned(FOnFinished) then FOnFinished(self.FParent); finally self.Free; end; end; else DefWindowProc(Fwnd,Message.Msg,Message.WParam,Message.LParam); end; end; //Und der Start des Threads aus TDirectory: constructor TDirectory.CreateThreaded (const aName: String; //Verzeichnispfad aFileNotify: TFileNotify; //Ereignis beim Finden einer neuen Datei aOnFinished:TDirectoryNotify); //Ereignis, wenn die Suche beendet ist begin TSearchThread.Create(self,aName,aFileNotify,aOnFinished); end; |
Re: mehrere funktionsparameter bei beginthread übergeben?
Ich frage nur, weil in BeginThread ja ein Funktionszeiger benötigt wird und kein Methodenzeiger.
|
Re: mehrere funktionsparameter bei beginthread übergeben?
Es wird ein Pointer erwartet bzw. die CPU erwartet einen 32bit-Wert. Und das klappt problemlos.
Man muss halt nur als Parameter (lparam) den Objektzeiger mitgeben, denn die Methode hätte ja ganz gern genau diesen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:51 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