Heim >Backend-Entwicklung >C++ >Warum meldet std::chrono::high_resolution_clock in Visual Studio 2012 eine höhere Auflösung als beobachtete Messungen?
Frage:
Im angegebenen Testprogramm ist die std::chrono::high_resolution_clock meldet eine Auflösung von 100 Nanosekunden, aber die von std::cout gemessene Zeit überschreitet durchweg 1 Mikrosekunde. Warum stimmt die erwartete Auflösung nicht mit den beobachteten Messungen überein?
Antwort:
Wenn Visual Studio 2012 verwendet wird, ist std::chrono::high_resolution_clock typedef' d zu system_clock, das eine begrenzte Auflösung von etwa 1 Millisekunde hat. Diese Diskrepanz ist die Ursache für die beobachtete Inkonsistenz.
Lösung:
Um ein hochauflösendes Timing in Visual Studio 2012 zu erhalten, sollte eine alternative Uhr verwendet werden, die QueryPerformanceCounter verwendet. Der folgende Code liefert ein Beispiel:
HighResClock.h:
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(); };
HighResClock.cpp:
namespace { const long long g_Frequency = []() -> long long { LARGE_INTEGER frequency; QueryPerformanceFrequency(&frequency); return frequency.QuadPart; }(); } HighResClock::time_point HighResClock::now() { LARGE_INTEGER count; QueryPerformanceCounter(&count); return time_point(duration(count.QuadPart * static_cast<rep>(period::den) / g_Frequency)); }
Diese HighResClock kann austauschbar mit Standarduhren verwendet werden und bietet die erforderliche hochauflösende Timing-Funktionalität.
Das obige ist der detaillierte Inhalt vonWarum meldet std::chrono::high_resolution_clock in Visual Studio 2012 eine höhere Auflösung als beobachtete Messungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!