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:

Code: Alles auswählen

; Vorher
Delay(2000)
; Nachher
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. :wink:

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.