AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unit in Thread packen?!

Ein Thema von XeRo · begonnen am 16. Dez 2005 · letzter Beitrag vom 19. Dez 2005
Antwort Antwort
Seite 1 von 2  1 2      
XeRo

Registriert seit: 23. Okt 2003
Ort: Warth
461 Beiträge
 
Delphi 7 Enterprise
 
#1

Unit in Thread packen?!

  Alt 16. Dez 2005, 11:30
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?
Angehängte Dateien
Dateityp: zip unit_activeconnections_795.zip (988 Bytes, 9x aufgerufen)
  Mit Zitat antworten Zitat
petergensfeld

Registriert seit: 8. Dez 2005
Ort: Raeren (B)
6 Beiträge
 
Delphi XE Professional
 
#2

Re: Unit in Thread packen?!

  Alt 16. Dez 2005, 11:41
Hallo,

im wesentlichen solltest Du eine neue Klasse von TThread ableiten, in der Du die Execute-Methode überschreibst:

Delphi-Quellcode:
type
  TScanThread = class(TThread)
  public
    procedure Execute; override;
    // ...
  end;

// ...

procedure TScanThread.Execute;
begin
  // hierin zeitaufwändige Scan-Routine platzieren
end;
// Edit: Ansonsten schau mal in der Hilfe unter TThread nach!

Gruß Dirk
Dirk
  Mit Zitat antworten Zitat
XeRo

Registriert seit: 23. Okt 2003
Ort: Warth
461 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Unit in Thread packen?!

  Alt 16. Dez 2005, 12:42

Also wenn ich die Unit "starte" mit:
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ActiveConnections.ScanNetworkResources(1,RESOURCEDISPLAYTYPE_GENERIC,listbox1.Items);
end;
dann muss ich
Code:
ActiveConnections.ScanNetworkResources(1,RESOURCEDISPLAYTYPE_GENERIC,listbox1.Items);
ins

Delphi-Quellcode:
procedure TScanThread.Execute;
begin
 ActiveConnections.ScanNetworkResources(1,RESOURCEDISPLAYTYPE_GENERIC,listbox1.Items);
end;
schreiben?

Und wie Ruf ich das dann auf?!
Leider Hilft mir die Hilfe nichts....
  Mit Zitat antworten Zitat
mgubler

Registriert seit: 14. Jul 2002
Ort: Krefeld
115 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Unit in Thread packen?!

  Alt 16. Dez 2005, 12:47
wie meinst du das :
Zitat von XeRo:

Also wenn ich die Unit "starte" mit:
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ActiveConnections.ScanNetworkResources(1,RESOURCEDISPLAYTYPE_GENERIC,listbox1.Items);
end;
dann muss ich
Code:
ActiveConnections.ScanNetworkResources(1,RESOURCEDISPLAYTYPE_GENERIC,listbox1.Items);
ins

Delphi-Quellcode:
procedure TScanThread.Execute;
begin
 ActiveConnections.ScanNetworkResources(1,RESOURCEDISPLAYTYPE_GENERIC,listbox1.Items);
end;
schreiben?

Und wie Ruf ich das dann auf?!
Leider Hilft mir die Hilfe nichts....

du musst dann meines erachtens TScanThread.Execute aufrufen.
Und dann macht der das.
Wie wäre es denn damit???
Gruß,
mgubler
  Mit Zitat antworten Zitat
XeRo

Registriert seit: 23. Okt 2003
Ort: Warth
461 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Unit in Thread packen?!

  Alt 16. Dez 2005, 12:51
Genau das geht eben nicht...
auf die Idee wär ich eh selber gekommen.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

Re: Unit in Thread packen?!

  Alt 16. Dez 2005, 12:53
Dann musst du eine Instanz von TScanThread erzeugen und Execute aufrufen:
Delphi-Quellcode:
var
  ScanThread: TScanThread;
begin
  ScanThread := TScanThread.Create(true);
  ScanThread.Execute;
  ScanThread.Free;
end;
Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#7

Re: Unit in Thread packen?!

  Alt 16. Dez 2005, 13:06
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;
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

Re: Unit in Thread packen?!

  Alt 16. Dez 2005, 13:08
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.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
XeRo

Registriert seit: 23. Okt 2003
Ort: Warth
461 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Unit in Thread packen?!

  Alt 16. Dez 2005, 13:10
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?
Angehängte Dateien
Dateityp: rar test_185.rar (170,9 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Unit in Thread packen?!

  Alt 16. Dez 2005, 13:16
kann rar hier nicht öffnen, aber wenn du in nem Thread eine Schleife wie:

Delphi-Quellcode:
while i > 0 do
 inc(i);
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.

Das sieht dann so aus:

Delphi-Quellcode:
while i>0 do
 begin
 if (i div 100) = 0 then
  sleep(1);
 inc(i);
 end;
(ich mach das in dem Beispiel nur alle 100 i's , dürfte ausreichen)

das heisst für dich, das du in die Unit oder zwischen die Funktionsaufrufe noch ein paar sleeps einbauen musst.

MfG Angel4585
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:18 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