Ich portiere eine Bibliothek von Windows nach *NIX (derzeit OSX). Weiß jetzt jemand, welche Funktion ich anstelle von Microsofts QueryPerformanceCounter und QueryPerformanceFrequency verwenden kann?
Was entspricht dem QueryPerformanceCounter von Windows unter OSX?
Paolo
Auf OSX mach_absolute_time
und mach_timebase_info
sind die besten Äquivalente zu Win32 QueryPerformance*-Funktionen.
Sehen http://developer.apple.com/library/mac/#qa/qa1398/_index.html
Ronny Brendel
http://www.tin.org/bin/man.cgi?section=3&topic=clock_gettime
(und die anderen dort erwähnten Funktionen) – es ist Posix! Wird auf schlechtere Zähler zurückgreifen, wenn HPET nicht vorhanden ist. (sollte aber kein Problem sein)
http://en.wikipedia.org/wiki/High_Precision_Event_Timer
Die Auflösung sollte etwa +10 MHz betragen.
-
clock_gettime
ist Teil der POSIX Realtime Extension und leider nicht auf Mac OS X implementiert.– Zum Archiv zurückgelassen
20. Mai 2011 um 1:13 Uhr
-
Keine tolle Antwort. clock_gettime wird nicht unterstützt und gibt die Zeit in Sekunden statt Zählerticks zurück (selbst wenn es unterstützt wurde).
– Gerechtigkeit
14. Februar 2014 um 19:25 Uhr
zeit
Probieren Sie Boosts aus pzeit für tragbares hochauflösendes Timing.
Aktualisieren (aufgefordert, 2 Jahre später, durch Marks Kommentar unten):
Heutzutage würde ich eine verwenden std::chrono::high_resolution_clock
; Beispiel.
-
Sieht so aus, als würde das unter Linux / Mac funktionieren, aber zitieren: Holen Sie sich die UTC-Zeit mit einer Uhr mit einer Auflösung von weniger als einer Sekunde. Auf Unix-Systemen wird dies mit GetTimeOfDay implementiert. Auf den meisten Win32-Plattformen wird es mit ftime implementiert. Win32-Systeme erreichen über diese API oft keine Mikrosekundenauflösung. Wenn eine höhere Auflösung für Ihre Anwendung entscheidend ist, testen Sie Ihre Plattform, um die erreichte Auflösung zu sehen.
– Mark Harviston
13. April 2012 um 13:48 Uhr
-
Danke, ptime nicht so portabel wie ich dachte. Trotzdem haben Sie mich aufgefordert, meine Antwort hier zu aktualisieren. Siehe auch stackoverflow.com/questions/1487695/…
– uhrtag
13. April 2012 um 17:58 Uhr
Er fragte nach OS X. Verwenden Sie diese APIs von CoreAudio:
AudioConvertHostTimeToNanos(AudioGetCurrentHostTime())
Früher hatte man entweder uclock oder man vertiefte sich in Assembler, um die zu lesen RDTSC.
G.
-
Wenn Sie einen hochauflösenden Timer verwenden, werden Sie wahrscheinlich nicht in den Energiesparmodus wechseln.
– graham.reeds
23. Januar 2009 um 11:47 Uhr
-
Möglicherweise nicht, aber ein anderer Prozess kann das System in diesen Modus versetzen. Es hängt davon ab, welche Art von Einschränkungen Ihr System hat. Für die breite Öffentlichkeit ist es nicht garantiert.
– ApplePieIstGut
23. Januar 2009 um 16:12 Uhr
-
Es wird auch scheitern, wenn Ihr Prozess CPUs wechselt, wenn ich mich richtig erinnere … wir haben einige Auswertungen mit tsc + linux und den Auswirkungen von Energiesparfunktionen durchgeführt. Jeder Kern hat seinen eigenen tsc.
– Ronny Brendel
24. Januar 2009 um 19:07 Uhr
-
Neuere AMD- und Intel-Chips implementieren konsistentes RDTSC. Gut genug für mich.
– Marius
7. Juli 2010 um 15:14 Uhr
-
Wenn Sie einen hochauflösenden Timer verwenden, werden Sie wahrscheinlich nicht in den Energiesparmodus wechseln.
– graham.reeds
23. Januar 2009 um 11:47 Uhr
-
Möglicherweise nicht, aber ein anderer Prozess kann das System in diesen Modus versetzen. Es hängt davon ab, welche Art von Einschränkungen Ihr System hat. Für die breite Öffentlichkeit ist es nicht garantiert.
– ApplePieIstGut
23. Januar 2009 um 16:12 Uhr
-
Es wird auch scheitern, wenn Ihr Prozess CPUs wechselt, wenn ich mich richtig erinnere … wir haben einige Auswertungen mit tsc + linux und den Auswirkungen von Energiesparfunktionen durchgeführt. Jeder Kern hat seinen eigenen tsc.
– Ronny Brendel
24. Januar 2009 um 19:07 Uhr
-
Neuere AMD- und Intel-Chips implementieren konsistentes RDTSC. Gut genug für mich.
– Marius
7. Juli 2010 um 15:14 Uhr