![]() |
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 |
Re: Dateisuche in Thread mit Abbrechen
so gehts:
Delphi-Quellcode:
Du übergibst also einen Pointer auf einen Boolean (welcher im Private deiner Form/klasse sein sollte) deinem Thread.
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; |
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 ;)
|
Re: Dateisuche in Thread mit Abbrechen
Danke schön euch beiden.
Ich hab das nun wie folgt umgesetzt:
Delphi-Quellcode:
Es funktioniert auf jeden Fall.
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; mfg Scrutor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 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