Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Thread Vs Timer !!! Wievile Threads sind zu viel ? (https://www.delphipraxis.net/8866-thread-vs-timer-wievile-threads-sind-zu-viel.html)

neolithos 15. Sep 2003 11:50

Re: Thread Vs Timer !!! Wievile Threads sind zu viel ?
 
Das kann sein das der Zusätzliche Thread durch SetTimer erzeugt wird, doch das dachte ich wäre ein SystemThread.

neolithos 15. Sep 2003 11:54

Re: Thread Vs Timer !!! Wievile Threads sind zu viel ?
 
Hab das mal getestet.
Bei mir (Win2k) gibt es keinen extra Thread bei Timer Einsatz.

TIPP:
Setzt mal einen Timer z.B. auf 2 sec.
In der Timer-Proc (WM_TIMER) eine Message-Box zeigen und dann das verhalten studieren.

Da sollte herauskommen das WM_TIMER eine normale Windowsnachricht ist.

Luckie 15. Sep 2003 13:10

Re: Thread Vs Timer !!! Wievile Threads sind zu viel ?
 
Mit SetTimer wird an das aufrufende Fenster und somit an den primären Thread eine WM_TIMER Nachricht geschickt. Dies ist eine Nachricht, wie jede andere auch. Wo soll da der zweite Thread herkommen?

Wormid 15. Sep 2003 15:05

Re: Thread Vs Timer !!! Wievile Threads sind zu viel ?
 
Und hier mal ein Link zu dem Source einer ThreadedTimer Komponente... da kann man dann mal als Beispiel sehen, wie man einen TTimer in einen eigenen Thread zwängen kann.

Gruß Wormid

DataCool 16. Sep 2003 15:57

Re: Thread Vs Timer !!! Wievile Threads sind zu viel ?
 
Hi Leute,

nochmal ne Frage zu dem Thema Threads :

Wenn ich einen Thread habe der nur alle 60 Sek./60000 ms. eine Aktion durchführen soll, darf ich dann im Execute des Threads den Thread mit sleep für 60 sek. schlafen legen, oder muss ich z.B. jede Sekunde überprüfen, ob der Thread nicht beendet wurde.

ich poste einfach mal zwei Code Beispiele, dann wid klar was ich meine :

Code 1(jetziger Zustand) :
Delphi-Quellcode:
procedure TmyThread.Execute;
Var iWait : Longint;
begin
   While not Terminated do begin
      doRequest;
      iWait := 0;
      While (not Terminated) and (iWait < 60000) do begin
         inc(iWait,500);
         sleep(500);
      end;
   end;
end;
Code 2(wäre von der Performence/Systembelastung natürlich besser) :
Delphi-Quellcode:
procedure TmyThread.Execute;
begin
   While not Terminated do begin
      doRequest;
      sleep(60000);
   end;
end;
Meine Befürchtung ist nur das bei Bsp. 2 im schlimmsten Fall beim Beenden der Applikation 60 Sek. darauf gewartet wird das der Thread mitbekommt das er sich beenden soll.

Danke im vorraus,

Data

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]

Luckie 16. Sep 2003 15:59

Re: Thread Vs Timer !!! Wievile Threads sind zu viel ?
 
Das sleep(60000) sorgt dafür, dass der Thread nur alle 60 Sekunden zuteilungsfähig wird.

DataCool 16. Sep 2003 16:06

Re: Thread Vs Timer !!! Wievile Threads sind zu viel ?
 
Hi Luckie,

d.h. also ich muss bei der ersten Variante bleiben, oder was kann ich anders machen ?

Gruß Data

Luckie 16. Sep 2003 16:09

Re: Thread Vs Timer !!! Wievile Threads sind zu viel ?
 
Kommt drauf an. Wenn er nur alle 60 Sekunden was machen soll, dann reicht doch ein sleep(60000).

DataCool 16. Sep 2003 16:14

Re: Thread Vs Timer !!! Wievile Threads sind zu viel ?
 
Das ist schon klar,

bekommt der Thread aber trotzdem mit, das er beendet werden soll und verlässt die Execute Methode ?

Angenommen Thread hat gerade das gemacht was er machen soll,
bekommt jetzt den Sleep(60000) Befehl
eine sek. später schliesse ich meine Applikation

Bekommt der Thread das mit oder bleibt die Applikation solange hängen bis die 60 Sek. des Threads um sind ?

Gleich noch ne Frage :

Wenn der Thread im "Sleep" ist, kann ich in der Zeit trotzdem eine public Methode des Threads aufrufen ? (Die betrifft in keinster Weise die Execute Schleife)

Danke,

Data

Luckie 16. Sep 2003 16:18

Re: Thread Vs Timer !!! Wievile Threads sind zu viel ?
 
Nein, wärend des des "sleeps" bekommt der Thread keine Rechenzeit, kann also nichts machen.
Wenn du den Prozess schließt, dann werden auch automatisch alle zugehörigen Thread-Objekte zerstört egal in welchem Zustand sie sind.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 Uhr.
Seite 2 von 3     12 3      

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