zeit setzen und abrufen wie viel vergangen ist??
zeit setzen und abrufen wie viel vergangen ist??
hallo zusammen
wie kann ich einen timer setzen der dann läuft und dann machen, dass nach 1er sek etwas bestimmtes geschieht??
wie kann ich einen timer setzen der dann läuft und dann machen, dass nach 1er sek etwas bestimmtes geschieht??
Siehe Hilfe

ElapsedMilliseconds()
Syntax
Ergebnis = ElapsedMilliseconds()
Beschreibung
Gibt die aktuelle Anzahl an Millisekunden seit dem Start des Computers zurück. Diese Funktion ist relativ genau: es kann eine leichte Differenz - abhängig vom verwendeten System - auftreten.
StartTime = ElapsedMilliseconds() ; ermittelt den aktuellen Wert
Delay(1000) ; wartet 1000 Millisekunden
ElapsedTime = ElapsedMilliseconds()-StartTime ; der 'ElapsedTime' Wert sollte ca. 1000 Millisekunden betragen

__________________________________________
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02
Falls Du in Deinem Programm eine Hauptschleife hast, ist das hier die Standardlösung:
Ansonsten auch einfach ein:
Was natürlich für 2 Sekunden das ganze Programm anhält.
Alternativ (wird dann aber komplizierter und gefährlicher) mit Threads:
Mit Threads muss man aber vorsichtig umgehen, da ein Thread parallel zum Hauptprogramm läuft und damit die Datenintegrität in Gefahr ist. Suche für mehr Infos über Threads hier mal im Forum nach 'Threads'
Code: Alles auswählen
time = ElapsedMilliseconds()
While resume
; Hauptschleifencode
If ElapsedMilliseconds() - time >= 2000
; Tue etwas nach 2 Sekunden
EndIf
Wend
Code: Alles auswählen
; Vorher
Delay(2000)
; Nachher
Alternativ (wird dann aber komplizierter und gefährlicher) mit Threads:
Code: Alles auswählen
Procedure Aktion(verzoegerung.l)
Delay(verzoegerung)
; Tue meine Aktion
Endprocedure
; Programm vorher
CreateThread(@Aktion(), 2000) ; Programm erstellt einen neuen Thread und läuft sofort weiter, 'Aktion' wird gestartet und wartet zunächst 2 Sekunden.
; Programm nachher
!UD2
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Unter Windows, wenn du ein Fenster hast:
Kannst auch die Timerfunktionen in PBOSL nehmen
Code: Alles auswählen
Procedure MacheJedeSekundeWas()
Debug "Ich mache gleich"
EndProcedure
If OpenWindow(0, #CW_USEDEFAULT, #CW_USEDEFAULT, 200, 100, #PB_Window_SystemMenu, "Test")
SetTimer_(WindowID(0), 0, 1000, @MacheJedeSekundeWas())
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
KillTimer_(WindowID(0), 0)
EndIf
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

@seggl
Wenn Du selbst etwas bewegst, kannst Du die Zeit doch auch selbst bestimmen!
Du bestimmst die zurückzulegende Strecke, die Anzahl der Schritte und den Takt, mit dem die Bewegung stattfinden soll.
Den Takt kannst Du mit Delay() oder per Timer bestimmen, wie Dir in den bisherigen Postings schon geraten wurde.
Wenn Du selbst etwas bewegst, kannst Du die Zeit doch auch selbst bestimmen!
Du bestimmst die zurückzulegende Strecke, die Anzahl der Schritte und den Takt, mit dem die Bewegung stattfinden soll.
Den Takt kannst Du mit Delay() oder per Timer bestimmen, wie Dir in den bisherigen Postings schon geraten wurde.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02
@seggl
Es gibt dafür 1001 Möglichkeiten. Wie genau das auszusehen hat, hängt von weiteren Umständen ab.
Hier aber zwei einfache Lösungen, denen jeweils ein völlig anderes Prinzip zugrunde liegt:
Hier eine andere:
Hausaufgabe:
Vollziehe den Code nach, versuche die Idee dahinter zu verstehen, wäge beider Vor- und Nachteile ab und baue die geeignetere davon in dein Programm ein.
Es gibt dafür 1001 Möglichkeiten. Wie genau das auszusehen hat, hängt von weiteren Umständen ab.
Hier aber zwei einfache Lösungen, denen jeweils ein völlig anderes Prinzip zugrunde liegt:
Code: Alles auswählen
startpos.l = 500
time.l = ElapsedMilliseconds()
curTime.l = time
While curTime - time < 2000
curTime = ElapsedMilliseconds() ; hole aktuelle Zeit
y.l = startpos - Int((curTime - time) / 10) ; setze neue Position absolut
debug y
Delay(100)
Wend
Code: Alles auswählen
y.l = 500
startTime.l = ElapsedMilliseconds()
lastTime.l = ElapsedMilliseconds()
curTime.l = lasttime
While curTime - startTime < 2000
curTime = ElapsedMilliseconds() ; hole aktuelle Zeit
y.l = y - Int((curTime - lastTime) / 10) ; verändere neue Position relativ zur vorherigen und abhängig von der verstrichenen Zeit
lastTime = curTime
debug y
Delay(100)
Wend
Vollziehe den Code nach, versuche die Idee dahinter zu verstehen, wäge beider Vor- und Nachteile ab und baue die geeignetere davon in dein Programm ein.

!UD2
Hallo!
Ich leg gleich mal los:
Ich leg gleich mal los:
Code: Alles auswählen
For i = 1 To 25
a = ElapsedMilliseconds()
Delay(1000)
b = ElapsedMilliseconds()
Debug "Differenz: "+Str(b-a)+" ms"
Next
End
Warum? Warum hat der Computer nicht eine 1000 Millisekunden lange Verzögerung? Es lief bei 577 MHz so gut wie nichts außer mein AntiViren Programm, eine Instanz des Internet Explorers und der PureBasic Editor.Debugger-Ausgabe hat geschrieben:Differenz: 1002 ms
Differenz: 1001 ms
Differenz: 1002 ms
Differenz: 1001 ms
Differenz: 1002 ms
Differenz: 1001 ms
Differenz: 1002 ms
Differenz: 1001 ms
Differenz: 1001 ms
Differenz: 1002 ms
Differenz: 1001 ms
Differenz: 1002 ms
Differenz: 1001 ms
Differenz: 1002 ms
Differenz: 1001 ms
Differenz: 1001 ms
Differenz: 1002 ms
Differenz: 1001 ms
Differenz: 1002 ms
Differenz: 1001 ms
Differenz: 1002 ms
Differenz: 1001 ms
Differenz: 1002 ms
Differenz: 1001 ms
Differenz: 1001 ms
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End