Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [Threads] In Windowthread pollen (https://www.delphipraxis.net/110624-%5Bthreads%5D-windowthread-pollen.html)

xZise 20. Mär 2008 22:37


[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:
FThread := TSearchThread.Create(true);
[...]
FThread.Resume;

while not FThread.Suspended do
begin
  lFile.Caption := FThread.FileName;
  DrawRing; // "Suche" Animation
  Delay(10);
end;
Das funktioniert irgendwie nicht, weil Suspended immer false ist?

MfG
xZise

turboPASCAL 21. Mär 2008 04:19

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;

sx2008 21. Mär 2008 05:10

Re: [Threads] In Windowthread pollen
 
Zitat:

Zitat von xZise
HWie finde ich aber heraus, dass er "fertig" also Execute verlassen hat?

Beim Erzeugen des TThread Objekts das Event OnTerminate mit einem Eventhandler verbinden.

xZise 21. Mär 2008 07:04

Re: [Threads] In Windowthread pollen
 
Hmmm,
also tP, genau das Problem habe ich ja:
Delphi-Quellcode:
procedure Execute...
begin
  SearchDir();
end;
Ich habe es so gelöst, dass ich nach SearchDir einfach Suspend aufgerufen habe :mrgreen:

MfG
xZise

turboPASCAL 21. Mär 2008 07:38

Re: [Threads] In Windowthread pollen
 
Zitat:

Zitat von xZise
Hmmm,
also tP, genau das Problem habe ich ja:
Delphi-Quellcode:
procedure Execute...
begin
  SearchDir();
end;
Ich habe es so gelöst, dass ich nach SearchDir einfach Suspend aufgerufen habe :mrgreen:

MfG
xZise

So, und "SearchDir" ist nun eine Procedure oder Function ?
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;

xZise 21. Mär 2008 08:26

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:
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;
MfG
xZise


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