Heim > Artikel > Backend-Entwicklung > Warum meldet std::chrono::high_resolution_clock eine niedrigere Auflösung als erwartet in Visual Studio 2012?
Auflösungsdiskrepanz in std::chrono::high_resolution_clock
In einem Testprogramm, das entwickelt wurde, um die von std::cout benötigte Zeit zu messen, Die Ausgabe zeigt eine durchweg hohe Abweichung von der erwarteten 100-Nansekunden-Auflösung von std::chrono::high_resolution_clock. Stattdessen liegt die gemessene Dauer zwischen 1 und 2 Mikrosekunden. Diese Diskrepanz wirft Fragen zur gemeldeten Auflösung und zur Genauigkeit der Zeitmessmethode auf.
Faktoren, die die Auflösung beeinflussen
Die Auflösung einer Uhr, wie durch ihre Periode angegeben, ist die kleinste Zeiteinheit, die gemessen werden kann. Obwohl Visual Studio 2012 über einen hochauflösenden Takt verfügt, mangelt es dieser leider an Präzision, da sie typischerweise eine Auflösung von etwa 1 Millisekunde aufweist. Dies wird auf die Tatsache zurückgeführt, dass Visual Studio 2012 „high_resolution_clock“ in „system_clock“ umdefiniert, was von Natur aus eine geringere Präzision aufweist.
Alternative hochauflösende Uhr für Visual Studio 2012
Zur Lösung Aufgrund dieser Einschränkung kann mithilfe der vom Betriebssystem bereitgestellten Funktion QueryPerformanceCounter eine genauere hochauflösende Uhr implementiert werden. Die unten bereitgestellte HighResClock-Klasse behebt dieses Problem, indem sie QueryPerformanceCounter verwendet, um eine zuverlässige Uhr mit Präzision im Mikrosekundenbereich bereitzustellen:
struct HighResClock { typedef long long rep; typedef std::nano period; typedef std::chrono::duration<rep, period> duration; typedef std::chrono::time_point<HighResClock> time_point; static const bool is_steady = true; static time_point now() { LARGE_INTEGER count; QueryPerformanceCounter(&count); return time_point(duration(count.QuadPart * static_cast<rep>(period::den) / g_Frequency)); } }; namespace { const long long g_Frequency = []() -> long long { LARGE_INTEGER frequency; QueryPerformanceFrequency(&frequency); return frequency.QuadPart; }(); }
Diese alternative Uhr kann nahtlos in vorhandenen Code integriert werden und ermöglicht so eine hochauflösende Zeitmessung auch innerhalb die Einschränkungen von Visual Studio 2012.
Das obige ist der detaillierte Inhalt vonWarum meldet std::chrono::high_resolution_clock eine niedrigere Auflösung als erwartet in Visual Studio 2012?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!