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 2 von 2     12   
NicoDE
(Gast)

n/a Beiträge
 
#11

Re: Unit in Thread packen?!

  Alt 16. Dez 2005, 12:53
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, SysUtils, Classes, Controls, Forms, StdCtrls;

type
  TScanThread = class(TThread)
  private
    FList: TStringList;
  public
    constructor Create(CreateSuspended: Boolean); virtual;
    destructor Destroy(); override;
    procedure Execute(); override;
    property List: TStringList read FList;
  end;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    ScanTerminated: Boolean;
    procedure OnScanTerminated(Sender: TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
  ActiveConnections;

{$R *.dfm}

{ TScanThread }

constructor TScanThread.Create(CreateSuspended: Boolean);
begin
  // inherited (angehalten)
  inherited Create(True);
  // private Variablen initialisieren
  FList := TStringList.Create();
  // fortsetzen falls gefordert
  if not CreateSuspended then
    Resume();
end;

destructor TScanThread.Destroy();
begin
  // private Variablen freigeben
  FList.Free();
  // inherited
  inherited Destroy();
end;

procedure TScanThread.Execute();
begin
  // was auch immer...
  ScanNetworkResources(RESOURCETYPE_DISK, RESOURCEDISPLAYTYPE_GENERIC, FList);
end;

{ TForm1 }

procedure TForm1.OnScanTerminated(Sender: TObject);
begin
  // scan beendet
  ScanTerminated := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Button deaktivieren (Schutz for Doppelklick)
  Button1.Enabled := False;
  try
    // ScanThread erzeugen (angehalten)
    with TScanThread.Create(True) do
    try
      // Beim Beenden nicht freigeben (wir brauchen Zugriff auch die Liste)
      FreeOnTerminate := False;
      // ScanTerminated initialisieren
      ScanTerminated := False;
      // Ereignisroutine setzen
      OnTerminate := OnScanTerminated;
      // nun den Thread arbeiten lassen
      Resume();
      // Warten bis der Thread fertig ist
      while not ScanTerminated do
        // Solange die GUI reagieren lassen...
        Application.ProcessMessages();
      // Ergebnisliste holen
      ListBox1.Items.Text := List.Text;
    finally
      // Thread freigeben
      Free();
    end;
  finally
    // Button reaktivieren
    Button1.Enabled := True;
  end;
end;

end.
  Mit Zitat antworten Zitat
XeRo

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

Re: Unit in Thread packen?!

  Alt 19. Dez 2005, 06:53
vielen dank...funktioniert super...auf das wär ich nie gekommen...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 12:59 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