Seite 1 von 2
zeit setzen und abrufen wie viel vergangen ist??
Verfasst: 29.10.2005 11:09
von seggl
hallo zusammen
wie kann ich einen timer setzen der dann läuft und dann machen, dass nach 1er sek etwas bestimmtes geschieht??
Verfasst: 29.10.2005 11:49
von DataMiner
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

Verfasst: 29.10.2005 11:54
von seggl
kannst du mir ein beispiel machen also wenn 2 sekunden vorbei sind, dass dann irgend etwas passiert!!??
Verfasst: 29.10.2005 14:01
von Froggerprogger
Falls Du in Deinem Programm eine Hauptschleife hast, ist das hier die Standardlösung:
Code: Alles auswählen
time = ElapsedMilliseconds()
While resume
; Hauptschleifencode
If ElapsedMilliseconds() - time >= 2000
; Tue etwas nach 2 Sekunden
EndIf
Wend
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:
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
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'
Verfasst: 29.10.2005 14:50
von ts-soft
Unter Windows, wenn du ein Fenster hast:
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
Kannst auch die Timerfunktionen in PBOSL nehmen
Verfasst: 29.10.2005 17:23
von seggl
danke viel mals für eure hilfe nun eine weitere frage was muss ich tun damit etwas 2sek anhält? also in meinem fall, dass sich ein sprite 2sek lang mit -10 pixeln auf der y-achse bewegt sprich nach oben fährt??
Verfasst: 30.10.2005 10:36
von seggl
plz helft mir!!
Verfasst: 30.10.2005 15:13
von jear
@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.
Verfasst: 30.10.2005 15:53
von Froggerprogger
@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:
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
Hier eine andere:
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
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.

Verfasst: 31.10.2005 12:05
von AND51
Hallo!
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
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
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.