![]() |
[Threads] In Windowthread pollen
Hallo DP,
ich mache folgendes: Zum einem habe ich einen WindowThread, also den ganz normalen, und dann den SearchThread. Der WindowThread pollt nun ständig. Wie finde ich aber heraus, dass er "fertig" also Execute verlassen hat?
Delphi-Quellcode:
Das funktioniert irgendwie nicht, weil Suspended immer false ist?
FThread := TSearchThread.Create(true);
[...] FThread.Resume; while not FThread.Suspended do begin lFile.Caption := FThread.FileName; DrawRing; // "Suche" Animation Delay(10); end; MfG xZise |
Re: [Threads] In Windowthread pollen
Hab ja nu keine Ahnung wie deine Threadklasse ausschaut. Ich mach es so:
Delphi-Quellcode:
procedure TMyThread.Execute;
begin while Self.Terminated do begin // Mach was end; end; |
Re: [Threads] In Windowthread pollen
Zitat:
|
Re: [Threads] In Windowthread pollen
Hmmm,
also tP, genau das Problem habe ich ja:
Delphi-Quellcode:
Ich habe es so gelöst, dass ich nach SearchDir einfach Suspend aufgerufen habe :mrgreen:
procedure Execute...
begin SearchDir(); end; MfG xZise |
Re: [Threads] In Windowthread pollen
Zitat:
Bau die ggf. "SearchDir" als Function um. Den Rückgabewert zB. als Boolean kannst du dann nutzen.
Delphi-Quellcode:
procedure TMyThread.Execute;
begin while (Self.Terminated) or (SearchDir) do; end; |
Re: [Threads] In Windowthread pollen
Nein SearchDir gibt nichts zurück. Und soll auch nur einmal aufgerufen werden (is rekrusiv).
Und warum soll ein Thread "suspenden", nachdem eine Schleife ausgeführt wurde? Das ist SearchDir (auch mit einer Schleife!):
Delphi-Quellcode:
MfG
procedure TSearchThread.SearchDir(const APath : string; const AParent : TDelphiDirectory);
var sr : TSearchRec; df : TDelphiFile; begin AParent.DeleteEnabled := false; if FindFirst(APath + '*.*', faAnyFile, sr) = 0 then begin try repeat {$WARN UNIT_PLATFORM OFF} if (sr.Name <> '.') and (sr.Name <> '..') and ((sr.Attr and faSysFile) <> faSysFile) then {$WARN UNIT_PLATFORM ON} begin if (sr.Attr and faDirectory) = faDirectory then begin df := AParent.Add(sr.Name, false); df.DeleteEnabled := FDeleteFolders; df.SetDeletionCount(@FDeletionCount); df.OnDelete := FDeleteEvent; SearchDir(APath + sr.Name + '\', (df as TDelphiDirectory)); end else begin with AParent.Add(sr.Name, true) do begin DeleteEnabled := not IsFileFiltered(sr.Name); SetDeletionCount(@FDeletionCount); OnDelete := FDeleteEvent; end; SetFile(sr.Name); end; end; until (FindNext(sr) <> 0) or (Breaked); finally FindClose(sr); end; end; end; xZise |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 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 by Thomas Breitkreuz