Seite 1 von 1

AddWindowTimer Zeit bis zum nächsten #PB_Event_Timer Ereignis

Verfasst: 18.11.2023 17:23
von interfind
Hallo,

wenn ich mit AddWindowTimer(0, 1, 60000) einen Timer erstelle
bekomme ich alle 60 Sekunden ein #PB_Event_Timer Ereignis.
Soweit so gut.
Kann ich auch irgendwie ermitteln wieviele Millisekunden
es bis zum nächsten #PB_Event_Timer Ereignis noch sind?

Wo speichert die Funktion den aktuellen Stand ab?

Re: AddWindowTimer Zeit bis zum nächsten #PB_Event_Timer Ereignis

Verfasst: 18.11.2023 18:28
von jacdelad
Das geht meines Wissens nicht oder nicht so einfach. Speicher am besten den Wert von ElapsedMilliseconds() plus die 60 Sekunden in einer Quadvariable. Dann kannst du mit einer weiteren Abfrage (MeinWert-ElapsedMilliseconds()) sofort die fehlenden Millisekunden ermitteln.

Übrigens sind die Timer-Ereignisse nicht immer 100%-ig genau. Wenn es dir um dir Messung einer Minute geht, solltest du einen Thread nutzen. Wenn nur alle 60 Sekunden, plsu minus, ein Ereignis ausgelöst werden soll, ist's ok.

Re: AddWindowTimer Zeit bis zum nächsten #PB_Event_Timer Ereignis

Verfasst: 19.11.2023 03:28
von juergenkulow

Code: Alles auswählen

; Restliche Wartezeit errechnen und ausgeben.
#Wartezeit=60000
If OpenWindow(0, 0, 0, 400, 100, "Timer Example", #PB_Window_SystemMenu)
    ProgressBarGadget(0, 10, 10, 380, 20, 0, 100)
    AddWindowTimer(0, 1, #Wartezeit)
    Start=ElapsedMilliseconds()
    TextGadget(1,10,30,200,20,"Restzeit: "+Str(#Wartezeit)+" ms")
    Value = 0
    Repeat
      Event = WaitWindowEvent(1)
      If Event = #PB_Event_Timer And EventTimer() = 1
        ; Debug Restzeit
        Start=ElapsedMilliseconds()
        Restzeit=#Wartezeit
        Value = (Value + 5) % 100
        SetGadgetState(0, Value)
      Else 
        Restzeit=#Wartezeit-(ElapsedMilliseconds()-Start)
      EndIf    
      SetGadgetText(1,"Restzeit: "+Str(Restzeit)+" ms")
      
    Until Event = #PB_Event_CloseWindow
  EndIf

Re: AddWindowTimer Zeit bis zum nächsten #PB_Event_Timer Ereignis

Verfasst: 21.11.2023 17:32
von interfind
Hallo juergenkulow und Danke für dein Beispiel.

Aber müsste nicht auch der WindowTimer irgendwo die Restlaufzeit zwischenspeichern
bis er das Timer Ereignis auslöst?

Re: AddWindowTimer Zeit bis zum nächsten #PB_Event_Timer Ereignis

Verfasst: 21.11.2023 21:59
von jacdelad
Ich bin zwar nicht Jürgen (allerdings heißt mein Vater so): Timermäßig stellt Windows uns nur die Funktionen SetTimer_() und KillTimer_() sowie die Message #WM_TIMER und eine mögliche TimerProc zur Verfügung.
https://learn.microsoft.com/de-de/windo ... msg/timers
Exakt das, was auch PureBasic bietet. Intern wird das sicher irgendwie gepsiechert und abgehandelt, aber als Programmierer hat man da meines Wissens keinen Zugriff darauf. Ich sehe es jetzt auch nicht unbedingt als Problem an, eine Variable mit den entsprechenden Informationen zu befüllen...

Re: AddWindowTimer Zeit bis zum nächsten #PB_Event_Timer Ereignis

Verfasst: 22.11.2023 08:52
von H.Brill
Soweit ich weiß, ist das nur ein einfacher Countdown-Zähler im Millisekundenbereich, der ab
den eingestellten ms rückwärts zählt und bei Erreichen von 0 ein Event auslöst und dann wieder
von vorne anfängt. Halt solange, bis man ihn killt. Ob der nun angehalten wird, wenn er einen Event
ausglöst hat ? Kann ja was dauern, wenn man nach dem Timerevent bestimmte Aufgaben bewältigt.
Ich denke, daß er sich, nachdem er einen Event abgesetzt hat, sich neu initialisiert bzw. von vorne wieder
anfängt, sobald die Routine abgearbeitet ist.

Ist ein interessantes Thema, gerade wie so was intern arbeitet. Vielleicht weiß ja jemand mehr.
Den Timer betrachte ich immer als Eieruhr zw. Sanduhr.

In der Richtung gibt es ja verschiedene Sachen : QueryPerformanceCounter, Ellapsedmilliseconds, GetTickCounts usw.