AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[Threads] In Windowthread pollen

Ein Thema von xZise · begonnen am 20. Mär 2008 · letzter Beitrag vom 21. Mär 2008
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

[Threads] In Windowthread pollen

  Alt 20. Mär 2008, 22:37
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
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: [Threads] In Windowthread pollen

  Alt 21. Mär 2008, 04:19
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;
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

Re: [Threads] In Windowthread pollen

  Alt 21. Mär 2008, 05:10
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.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#4

Re: [Threads] In Windowthread pollen

  Alt 21. Mär 2008, 07:04
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

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#5

Re: [Threads] In Windowthread pollen

  Alt 21. Mär 2008, 07:38
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

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;
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#6

Re: [Threads] In Windowthread pollen

  Alt 21. Mär 2008, 08:26
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
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:20 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