ts-soft hat geschrieben:
Hä, ist doch toll, das die Variable sich der Architektur anpasst. Außerdem ist das die "gebräuchlichste" Variable,
jedenfalls für handle, pointer usw.
Natürlich
. Ich meinte nur im Zusammenhang mit Strukturen für APIs. Hab im letzten Post die Info ausgelassen... sorry.
Die Idee mit der VM kam mir auch, allerdings habe ich Probleme mit der Hardware-Leistung meines PCs. Meine RAM-Auslastung ist meist schon im 2/3-Bereich und eine VM sorgt dann für eine unschöne RAM-Auslagerung. Bin nicht sicher, ob 1GB RAM für eine Linux-VM ausreicht.
hier mal der extrahierte Code: Es soll einen Zeitstempel in Nanosekunden zurückgeben (für Zeitmessung). Auf Windows und Mac klappt es ganz gut. Bei Linux ist das Ergebnis von der Dimensionierung der Struktur abhängig.
Code: Alles auswählen
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
#CLOCK_MONOTONIC_RAW = 4
Structure timespec
tv_sec.i ; die aktuelle Zeit in Sekunden
tv_nsec.i ; die aktuellen Nanosekunden der aktuell laufenden Sekunde (quasi die ganzen Nachkommastellen)
EndStructure
ImportC ""
clock_gettime.i(clock_id.i, *tp.timespec) ; aktuelle Zeit ermitteln
EndImport
CompilerCase #PB_OS_MacOS
ImportC ""
mach_absolute_time.q() ; aktuelle Zeit in Nanosekunden (seit Systemstart)
EndImport
CompilerEndSelect
Procedure.q gebe_Nanosek()
Protected qTimer_Ticks.q = 0
Protected qTimer_Frequenz.q = 0
Protected qZeitstempel_nano.q = 0
; Auswahl des Betriebssystems
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
If ((QueryPerformanceFrequency_(@qTimer_Frequenz) <> 0) And (QueryPerformanceCounter_(@qTimer_Ticks) <> 0))
qZeitstempel_nano = (qTimer_Ticks * 1e9) / qTimer_Frequenz
EndIf
CompilerCase #PB_OS_Linux
Protected Zeitstempel.timespec
If (clock_gettime(#CLOCK_MONOTONIC_RAW, @Zeitstempel) = 0) ; 0: OK, -1: Fehler
qZeitstempel_nano = (Zeitstempel\tv_sec * 1e9) + Zeitstempel\tv_nsec
EndIf
CompilerCase #PB_OS_MacOS
If (Aufloesung\numer <> 0)
qZeitstempel_nano = mach_absolute_time()
EndIf
CompilerEndSelect
ProcedureReturn qZeitstempel_nano
EndProcedure
qWert_1.q = gebe_Nanosek()
Delay(20)
qWert_2.q = gebe_Nanosek()
Debug "Wert 1: " + Str(qWert_1)
Debug "Wert 2: " + Str(qWert_2) + #CRLF$
Debug "Differenz: " + StrD((qWert_2 - qWert_1)/1e6,6) + " ms"
Edit: Code angepasst an Integer