![]() |
Funktion aus dem Hauptthread in einem extra Thread ausführen
Hallo,
ich habe eine Funktion, wenn ich auf eine Listbox klicke, sollen Informationen für den Eintrag angezeigt werden, unter anderem eine IP, für die Domain, die IP soll immer neu abgerufen werden, bei einem Klick auf einen Eintrag. So, damit das Programm aber nicht nach dem Klick hängt, möchte ich gerne eine Funktion GetIpAddress in einem extra Thread aufrufen. Hat jemand eine Idee, wie ich das am besten anstellen könnte? MfG. F.M. |
Re: Funktion aus dem Hauptthread in einem extra Thread ausfü
hi
also vll ist das ein bissel über das ziel hinnaus aber egal... ich würde, wenn du das echt über nen thread regel willst / musst das so machen:
Delphi-Quellcode:
so ich habe den code nicht getestet & auch nicht geprüft...unit untTResolve; interface uses Classes; type TResolveEvent = procedure(Sender : TObject; Address : String; Ip : String) of Object; type TResolve = class(TThread) private _toResolve : String; FOnRes : TResolveEvent; protected procedure execute; override; public property OnIpResolved : TResolveEvent read FOnRes write FOnRes; procedure resolve(ip : String); end; implementation { TResolve } procedure TResolve.execute; var ResAddress : String; begin inherited; // do resolving and all that stuff // ResAddress = fubar if assigend(FOnRes) then FOnRes(self, ResAddress, self._toResolve); self.Suspend(); end; procedure TResolve.resolve(ip: String); begin self._toResolve := ip; self.resume(); end; end. /// and the usage is.... procedure TForm1.Button1Click(Sender: TObject); var res : TResolve; begin res := TResolve.Create(true); res.OnIpResolved := self.HandleResolve; res.resolve(); end; procedure TForm1.HandleResolve(Sender : TObject; Address : String; Ip : String); begin listBox1.fubar := Address; // well normaly listBox1.items[...] and so on.... end; Aber summa summarum sollte es so gehen.. auch wenn das per event vll. etwas umständlich ist ^^ ist hoffentlich wenigstens ein ansatz... cya Corelgott edit: aso res local zu machen und nichht zu freen ist vll nicht sooo glücklich ^^... also vll das noch anpassen ^^ |
Re: Funktion aus dem Hauptthread in einem extra Thread ausfü
Das suspend ist überflüssig, da der Thread sowieso zu ende ist an der Stelle. Desweiteren müssen alle Zugriffe auf die VCL mit Synchronize synchronisiert werden, da die VCL nicht threadsafe ist.
|
Re: Funktion aus dem Hauptthread in einem extra Thread ausfü
Hallo,
Du gibst das TThread-Objekt am Ende nicht frei. Besser ist das so:
Delphi-Quellcode:
Wenn Du so einen Thread öfter brauchst, ist es besser, ihn einmal zu erstellen und immer wieder schlafen zu legen, als ständig einen neuen Thread zu erstellen.
procedure TForm1.Button1Click(Sender: TObject);
var Res: TResolve; begin Res := TResolve.Create(True); Res.FreeOnTerminate := True; //<---- Res.OnIpResolved := HandleResolve; Res.Resolve(<DOMAIN>); end; Gruß xaromz |
Re: Funktion aus dem Hauptthread in einem extra Thread ausfü
Ok,
vielen Dank erstmal. Ich werde das heute Abend einmal ausprobieren. Ich hoffe doch mal, dass das so klappen wird. MfG F.M. Edit: hat alles wunderbar geklappt. Danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 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