Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Threaded vs. Windows-Timer: Was ist 'besser'? (https://www.delphipraxis.net/166581-threaded-vs-windows-timer-ist-besser.html)

Iwo Asnet 20. Feb 2012 11:23

Threaded vs. Windows-Timer: Was ist 'besser'?
 
Hallo,

Wir sind hier am 'streiten' bzw. nicht wissen (deshalb streiten), was 'besser' für eine Anwendung ist: Ein threaded Timer oder ein Windows-Timer.

Ein threaded Timer könnte so umgesetzt werden
Delphi-Quellcode:
Procedure TThreadedTimer.Execute;
Begin
  While not Terminated do begin
    If FEnabled then
      Synchronize (DoOnTimer);
    Sleep (FInterval);
  End
End;
Oder mit einem Event:
Delphi-Quellcode:
Procedure TThreadedTimer.Execute;
Begin
  While not Terminated do begin
    If WaitForSingleObject (FWhatEverHandle, FInterval) = WAIT_OBJECT_0 Then
       If FEnabled then
         Synchronize (DoOnTimer);Synchronize (DoOnTimer);
  End
End;
Welche Variante würdet ihr nehmen, wenn die Aufgabe 'optimiert den Code hinsichtlich Performance' heißt und ihr nur max. 20% einer CPU für euch habt?

himitsu 20. Feb 2012 12:23

AW: Threaded vs. Windows-Timer: Was ist 'besser'?
 
Da eigentlich aller wichtiger Code im Synchronize abläuft und im Timer eigentlich nur noch ein Sleep drin steckt.

Ist der Thread vollkommen nutzlos, da er nichts macht, außer schlafen.

Antwort: Windows-Timer (z.B. TTimer) ist definitiv besser.
(hier scheint es ja nicht um einen HighResolutionTimer zu gehn)


PS:
Zitat:

Delphi-Quellcode:
If FEnabled then

Da bei beiden Beispielen der Thread läuft, selbst wenn er nichts machen soll, verschwendet er sogar noch mehr Systemresourcen. (vorallem bei Enabled = False)

Iwo Asnet 20. Feb 2012 14:59

AW: Threaded vs. Windows-Timer: Was ist 'besser'?
 
Zitat:

Zitat von himitsu (Beitrag 1151974)
...Ist der Thread vollkommen nutzlos, da er nichts macht, außer schlafen.

Der Thread feuert in regelmäßigen Abständen ein Event. Damit ist er so genauso nutzlos wie ein Timer.
Zitat:

Zitat von himitsu (Beitrag 1151974)
Antwort: Windows-Timer (z.B. TTimer) ist definitiv besser.

Ah, ok. Also sind z.B. 10-100 Windows timer nebst WM_Timer - Messages 'billiger' als a)10-100 Threads oder b) 1 Thread mit priority queue der 10-100 Timermessages verwaltet?

Ich dachte immer, diese WM_Timer sind teuer. Man lernt halt nie aus.

WoGe 20. Feb 2012 15:01

AW: Threaded vs. Windows-Timer: Was ist 'besser'?
 
Ähem,

vlt. gilt das ja in aktuellen Windows-Versionen nicht mehr, aber hatte die Timer-Botschaft nicht ein niedrige Priorität und konnte deshalb auch mal "verschluckt" werden?

Grüße
wo

jaenicke 20. Feb 2012 15:54

AW: Threaded vs. Windows-Timer: Was ist 'besser'?
 
Zitat:

Zitat von Iwo Asnet (Beitrag 1151993)
Ah, ok. Also sind z.B. 10-100 Windows timer nebst WM_Timer - Messages 'billiger' als a)10-100 Threads oder b) 1 Thread mit priority queue der 10-100 Timermessages verwaltet?

Wozu so viele Timer? :shock:
Einer oder zumindest sehr wenige reichen doch, die ggf. die anderen Aufgaben anstoßen...

Ob nun 100 Threads oder 100 Timer, beides macht (meistens) wenig Sinn.


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