![]() |
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.
|
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. |
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?
|
Re: Thread Vs Timer !!! Wievile Threads sind zu viel ?
Und hier mal ein
![]() Gruß Wormid |
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:
Code 2(wäre von der Performence/Systembelastung natürlich besser) :
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;
Delphi-Quellcode:
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.
procedure TmyThread.Execute;
begin While not Terminated do begin doRequest; sleep(60000); end; end; Danke im vorraus, Data [edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit] |
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.
|
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 |
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).
|
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 |
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. |
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