aktuelle Zeit mit Millisekunden

Für allgemeine Fragen zur Programmierung mit PureBasic.
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

aktuelle Zeit mit Millisekunden

Beitrag von SBond »

Hi Leute,

bietet PB eine Funktion, mit der man die aktuelle Zeit (inklusive Millisekunden) ermittelt? Die Date()-Funktion wäre an sich genau das richtige, bietet aber nur Sekunden an. Eine weitere Möglichkeit wäre noch ElapsedMilliseconds(). Allerdings verunsichert mich die PB-Hilfe in der folgendes steht:
Der zurückgegebene absolute Wert ist nutzlos, da er abhängig vom Betriebssystem variiert. [...]
Da es Plattformübergreifend sein soll, weiß ich nicht, welche Werte unter OS X oder Linux angenommen werden. Mit APIs wäre das ganze auch problemlos machbar, aber auf die würde ich lieber verzichten (zumal ich unter Linux/Mac keine Erfahrung mit APIs gemacht habe)
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: aktuelle Zeit mit Millisekunden

Beitrag von NicTheQuick »

Unter Linux beginnt 'ElapsedMilliseconds()' ab Programmstart mit 0. Unter Windows ist der Wert glaube ich abhängig vom Systemstart.
Mit 'gettimeofday' bekommst du die aktuelle Zeit plus Mikrosekunden:

Code: Alles auswählen

;Linux only
Structure timeval
 	tv_sec.q   ;__time_t      -> __TIME_T_TYPE      -> __SYSCALL_SLONG_TYPE -> __SQUAD_TYPE -> long int | __quad_t
 	tv_usec.q  ;__suseconds_t -> __SUSECONDS_T_TYPE -> __SYSCALL_SLONG_TYPE -> __SQUAD_TYPE -> long int | __quad_t
 EndStructure
 
 Procedure.d seconds()
 	Protected tim.timeval
 	gettimeofday_(tim, #Null)
 	ProcedureReturn tim\tv_sec + tim\tv_usec / 1000000.
 EndProcedure
 
 Define today.d = seconds()
 Define seconds.q = Round(today, #PB_Round_Down)
 Define hours.q = seconds / 3600
 Define minutes.q = seconds / 60 - 60 * hours
  seconds % 60
 hours % 24
 Debug "Zeit: " + hours + ":" + minutes + ":" + today
 
 Define time.d = seconds()
 Delay(1000)
 time = seconds() - time
 Debug time
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

Re: aktuelle Zeit mit Millisekunden

Beitrag von SBond »

NicTheQuick hat geschrieben:Unter Windows ist der Wert glaube ich abhängig vom Systemstart.
Jap. Das ist Richtig. Aber schon mal gut zu wissen, dass es unter Linux ab Programmstart ist. Dann werde ich es erstmal mit APIs lösen. Deine Lösung scheint für Linux zu sein. Das ist schonmal sehr hilfreich <). Unter Windows lässt es sich leicht mit GetLocalTime_() bzw. GetSystemTime_() lösen. Mac weiß ich noch nicht, aber dass lässt sich noch herausfinden.

danke dir für deine Hilfe :)
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Antworten