![]() |
Unit in Thread packen?!
Liste der Anhänge anzeigen (Anzahl: 1)
Hi ich verwende die Unit von Florian Bernd(Anhang).
Sie Scannt das Netzwerk nach PC's. Ich will die Unit in einen Thread packen damit das Programm auch beim Scannen noch reagiert. Nur habe ich keine Ahnung wie...kann mir das jemand sagen/machen? |
Re: Unit in Thread packen?!
Hallo,
im wesentlichen solltest Du eine neue Klasse von TThread ableiten, in der Du die Execute-Methode überschreibst:
Delphi-Quellcode:
// Edit: Ansonsten schau mal in der Hilfe unter TThread nach!
type
TScanThread = class(TThread) public procedure Execute; override; // ... end; // ... procedure TScanThread.Execute; begin // hierin zeitaufwändige Scan-Routine platzieren end; Gruß Dirk |
Re: Unit in Thread packen?!
:gruebel:
Also wenn ich die Unit "starte" mit:
Delphi-Quellcode:
dann muss ich
procedure TForm1.BitBtn1Click(Sender: TObject);
begin ActiveConnections.ScanNetworkResources(1,RESOURCEDISPLAYTYPE_GENERIC,listbox1.Items); end;
Code:
ins
ActiveConnections.ScanNetworkResources(1,RESOURCEDISPLAYTYPE_GENERIC,listbox1.Items);
Delphi-Quellcode:
schreiben?
procedure TScanThread.Execute;
begin ActiveConnections.ScanNetworkResources(1,RESOURCEDISPLAYTYPE_GENERIC,listbox1.Items); end; Und wie Ruf ich das dann auf?! Leider Hilft mir die Hilfe nichts.... :wall: |
Re: Unit in Thread packen?!
wie meinst du das :
Zitat:
du musst dann meines erachtens TScanThread.Execute aufrufen. Und dann macht der das. Wie wäre es denn damit??? |
Re: Unit in Thread packen?!
Genau das geht eben nicht...
auf die Idee wär ich eh selber gekommen. |
Re: Unit in Thread packen?!
Dann musst du eine Instanz von TScanThread erzeugen und Execute aufrufen:
Delphi-Quellcode:
Florian
var
ScanThread: TScanThread; begin ScanThread := TScanThread.Create(true); ScanThread.Execute; ScanThread.Free; end; |
Re: Unit in Thread packen?!
Die Execute-Methode wird beim Create aufgerufen. Der Code könnte so aussehen:
Delphi-Quellcode:
var
ScanThread: TScanThread; begin ScanThread := TScanThread.Create(True); try ScanThread.FreeOnTerminate := False; ScanThread.Resume(); ScanThread.WaitFor(); // ...Daten aus dem Thread holen... finally ScanThread.Free(); end; end; |
Re: Unit in Thread packen?!
Der Parameter CreateSuspensed in der Create Methode legt fest, ob Execute direkt aufgerufen wird. Wenn der Parameter true ist, wird der Thread eingefroren, bis Execute aufgerufen wird.
|
Re: Unit in Thread packen?!
Liste der Anhänge anzeigen (Anzahl: 1)
Auch das habe ich versucht...
bewirkt aber leider nicht dass das Programm wärend dem Scanvorgang reagiert. Hab mal das Programm in den Anhang gegeben... Könnt ihr euch das mal ansehen? |
Re: Unit in Thread packen?!
kann rar hier nicht öffnen, aber wenn du in nem Thread eine Schleife wie:
Delphi-Quellcode:
hast , dann solltest du ab und zu ein Sleep rein machen, da der Thread sonst du gesamten Ressourcen des Programms in anspruch nimmt un der rest des Programms nicht reagieren kann.
while i > 0 do
inc(i); Das sieht dann so aus:
Delphi-Quellcode:
(ich mach das in dem Beispiel nur alle 100 i's , dürfte ausreichen)
while i>0 do
begin if (i div 100) = 0 then sleep(1); inc(i); end; das heisst für dich, das du in die Unit oder zwischen die Funktionsaufrufe noch ein paar sleeps einbauen musst. MfG Angel4585 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12: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