zeit setzen und abrufen wie viel vergangen ist??

Anfängerfragen zum Programmieren mit PureBasic.
seggl
Beiträge: 17
Registriert: 25.08.2005 16:57

zeit setzen und abrufen wie viel vergangen ist??

Beitrag von seggl »

hallo zusammen

wie kann ich einen timer setzen der dann läuft und dann machen, dass nach 1er sek etwas bestimmtes geschieht??
Benutzeravatar
DataMiner
Beiträge: 220
Registriert: 10.10.2004 18:56

Beitrag 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
:)
__________________________________________
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
seggl
Beiträge: 17
Registriert: 25.08.2005 16:57

Beitrag von seggl »

kannst du mir ein beispiel machen also wenn 2 sekunden vorbei sind, dass dann irgend etwas passiert!!??
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag 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'
!UD2
Benutzeravatar
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

Beitrag 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
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.
Bild
seggl
Beiträge: 17
Registriert: 25.08.2005 16:57

Beitrag 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??
seggl
Beiträge: 17
Registriert: 25.08.2005 16:57

Beitrag von seggl »

plz helft mir!!
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag 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.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag 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:
!UD2
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten