Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dateisuche in Thread mit Abbrechen (https://www.delphipraxis.net/93391-dateisuche-thread-mit-abbrechen.html)

Scrutor 5. Jun 2007 09:03


Dateisuche in Thread mit Abbrechen
 
Hallo zusammen,

ich habe folgendes Problem und hoffe mir kann hier einer aushelfen:

Ich muss in ca. 6000 Dateien einen String suchen, der sich innerhalb der ersten 4 Zeilen befindet.
Mit FindFirst suche ich nach den Dateien und lese dann die Zeilen von 1 bis 4 aus.
Mein Problem ist nun, dass natürlich das Programm während des Suchens einfriert, deswegen möchte ich die Suche in einen Thread auslagern.
Und dabei stell ich mich wohl ein bisschen doof an.

Ich möchte also einen Such-Thread starten, dem ich auch noch mindestens 2 Parameter mit übergebe.
Es sollte auch möglich sein durch klicken auf "Abbrechen", dass der Such-Thread sich beendet.

Über einen Lösungsvorschlag würde ich mich freuen.



mfg
Scrutor

SirThornberry 5. Jun 2007 09:26

Re: Dateisuche in Thread mit Abbrechen
 
so gehts:
Delphi-Quellcode:
TSearchThread = class(TThead)
protected
  fCancelVar: PBoolean;
  procedure Execute(); override;
public
  constructor Create(ACancelVar: PBoolean);
end;
[...]
constructor TSearchTread.Create(ACancelVar: PBoolean);
begin
  inherited Create(True);
  fCancelVar := ACancelVar;
  Resume();
end;

procedure TSearchThread.Execute();
begin
  fCancelVar := False;
  //Search for file until finished or fCancelVar = True
end;
Du übergibst also einen Pointer auf einen Boolean (welcher im Private deiner Form/klasse sein sollte) deinem Thread.

jfheins 5. Jun 2007 09:28

Re: Dateisuche in Thread mit Abbrechen
 
Das Abbrechen und Unterbrechen brauchst du gar nicht selber machen - beim Abbrechen kannst du den Thread einfach terminaten (der sollte ja sowiso in einer while not Terminated do Schleife laufen) und zum Unterbrechen einfach Suspenden ;)

Scrutor 5. Jun 2007 11:01

Re: Dateisuche in Thread mit Abbrechen
 
Danke schön euch beiden.
Ich hab das nun wie folgt umgesetzt:

Delphi-Quellcode:
type
  TSearchThread = class(TThread)
  protected
    procedure Execute; override;
end;

var
  FormMain: TFormMain;
  SearchThread:TSearchThread;

[...]

procedure TSearchThread.Execute;
begin
  while not Terminated do
   begin
     SucheTextInDateien(FormMain.EditSuche.Text);
   end;
end;

procedure TFormMain.btnSucheClick(Sender: TObject);
begin
  if btnSuche.Caption='Abbrechen' then
   begin
     SearchThread.Terminate;
     btnSuche.Caption:='Suchen';
     FormMain.Status.Panels.Items[0].Text:='Suche abgebrochen !';
     exit;
   end;
  if trim(EditSuche.Text)='' then exit;
  btnSuche.Caption:='Abbrechen';

  SearchThread := TSearchThread.Create(false);
  SearchThread.FreeOnTerminate := true;
end;
Es funktioniert auf jeden Fall.


mfg
Scrutor


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:05 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