Seite 1 von 3
Frage zur genauen Funktionsweise von ElapsedMilliseconds()
Verfasst: 08.02.2018 15:27
von diceman
Nur damit ich das richtig verstehe ...
Es scheint so, daß ElapsedMilliseconds() immer 0 zurückgibt beim allerersten Aufruf (dabei ist es egal, ob im Hauptprogamm oder in irgendeiner Prozedur).
Ab dem ersten Aufruf zählt der Timer im Hintergrund kontinuierlich hoch, und kann jederzeit mit
"abgefangen" werden, und so für allerhand nette Timing-basierte Abfragen genutzt werden. Ein konkretes Beispiel wäre zum Beispiel das Verhalten der Geister bei Pacman, die immer nach gewissen Zeitintervallen zwischen
Roaming-Mode und
Search-Mode wechseln. Also wenn ich ein Programm schreibe, in dem ich Millisekunden-Abfrage benötige, reicht es einmal zum Programmstart ElapsedMilliseconds() ohne Rückgabewert aufrufen, um den globalen Millisekunden-Timer zu initialiseren, oder?
Re: Frage zur genauen Funktionsweise von ElapsedMilliseconds
Verfasst: 08.02.2018 15:31
von Josh
ElapsedMilliseconds() ist eher dafür gedacht, eine Zeitdifferenz zu bekommen. Ich bin mir nicht mal sicher, ob ElapsedMilliseconds() bei allen OS mit 0 beginnt. Da hat sich mal was geändert.
Code: Alles auswählen
time = ElapsedMilliseconds()
Delay (1)
time = ElapsedMilliseconds() - time
Debug time
Re: Frage zur genauen Funktionsweise von ElapsedMilliseconds
Verfasst: 08.02.2018 15:35
von RSBasic
Mit ElapsedMilliseconds() kannst du die Differenz zweier Zeitwerte ermitteln und kannst damit herausfinden, wie lange ein Vorgang, der dazwischen durchgeführt wurde, gedauert hat. Beispiel aus der Hilfe:
Code: Alles auswählen
StartTime = ElapsedMilliseconds() ; ermittelt den aktuellen Wert
Delay(1000) ; wartet 1000 Millisekunden
ElapsedTime = ElapsedMilliseconds()-StartTime ; der 'ElapsedTime' Wert sollte ca. 1000 Millisekunden betragen
Die 2. Zeile soll nur den Vorgang, der eine Sekunde dauert, simulieren.
Wenn du ein Fenster hast und du möchtest alle 100 Millisekunden was ausführen, dann ist AddWindowTimer sinnvoller.
Re: Frage zur genauen Funktionsweise von ElapsedMilliseconds
Verfasst: 08.02.2018 15:37
von diceman
Ja, das ist schon klar. Ging mir um die grundsätzliche Funktionsweise.

Jetzt kommt mir meine Frage fast schon wieder ein bißchen doof vor. Ist halt nur so, daß folgender Code bei Blitzbasic 1000 zurückgegeben hätte (eben weil der Millisekunden-Timer bei Programmstart immer automatisch initialisiert wurde), bei PB dagegen 0.
Trotzdem danke für die Antworten.
Ich habe mir nämlich angewöhnt, abgelaufene Timer-Variablen, sobald die zugehörige IF-Abfrage triggert, auf 0 zurückzusetzen, so daß ich immer abfragen kann, ob ein Timer noch aktiv zählt, oder wieder inaktiv ist.
Re: Frage zur genauen Funktionsweise von ElapsedMilliseconds
Verfasst: 08.02.2018 15:43
von RSBasic
Unter Windows wird soweit ich weiß die Zeit in Millisekunden seit dem Windows-Start zurückgegeben, aber welcher Wert zurückgegeben wird, kann dir egal sein. Wichtig ist nur, dass du die Differenz ermitteln kannst. Wie lange z.B. deine Anwendung läuft, kannst du so machen, dass du in der ersten Zeile time = ElapsedMilliseconds() aufrufst und später, wenn du die Prozessdauer ermitteln möchtest, einfach nochmal aufrufst und die Differenz ermittelst. Dann weißt du, wie lange deine Anwendung lief.
Re: Frage zur genauen Funktionsweise von ElapsedMilliseconds
Verfasst: 08.02.2018 15:45
von diceman
Alles klar jetzt.
Meinetwegen kann der Thread auch wieder gelöscht werden; ist mir jetzt fast schon wieder peinlich, sowas gefragt zu haben.
Re: Frage zur genauen Funktionsweise von ElapsedMilliseconds
Verfasst: 08.02.2018 15:47
von RSBasic
Nein, peinlich ist das auf keinen Fall. Ich finde, das war eine ganz normale Frage, die für zukünftige Einsteiger hilfreich sein wird.
Jeder fängt klein an. Niemand weiß alles. Außerdem hast du deine Frage im Anfänger-Unterforum gestellt. Also gar kein Problem.

Re: Frage zur genauen Funktionsweise von ElapsedMilliseconds
Verfasst: 08.02.2018 15:51
von diceman
Jetzt habe ich doch noch eine Frage:
Du sagst, daß man bei Fensteranwendungen lieber AddWindowTimer() nutzen sollte ... gibt es dafür einen Grund? Weil, wenn ich jetzt grundsätzlich plane, Fullscreen und Fenster-Modus optional anzubieten, würde ich doch lieber bei einer (nämlich der ElapsedMilliseconds() )-Variante bleiben, sonst muß ich ja jede Timer-Abfrage doppelt programmieren - einmal für Fullscreen, einmal für Fenster-Modus.
Oder ist ElapsedMilliseconds() im Fenster-Modus unzuverlässig?
Re: Frage zur genauen Funktionsweise von ElapsedMilliseconds
Verfasst: 08.02.2018 15:56
von RSBasic
Wenn du Fullscreen (OpenScreen) und Fenster-Modus machen möchtest, hast du natürlich recht. Dann kannst du mit ElapsedMilliseconds arbeiten.
Nur wenn du reine Fenster-Anwendungen schreiben möchtest, kannst du die Timer-Funktion benutzen. Du kannst aber auch ElapsedMilliseconds benutzen, nur ist es mit der Timer-Funktion komfortabler.
Wie es bei Fenstern mit der Event-Timer-Funktion aussieht, hier ein Beispielcode, falls du irgendwann mal eine reine Fenster-Applikation erstellen möchtest:
Code: Alles auswählen
EnableExplicit
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
AddWindowTimer(0, 1, 1000)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Timer
Select EventTimer()
Case 1
Debug "Timer-Event wird jede Sekunde ausgelöst."
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
Re: Frage zur genauen Funktionsweise von ElapsedMilliseconds
Verfasst: 08.02.2018 16:02
von diceman
Danke, ist notiert!