Heim >Backend-Entwicklung >C++ >Warum meldet std::chrono::high_resolution_clock in Visual Studio 2012 eine höhere Auflösung als beobachtete Messungen?

Warum meldet std::chrono::high_resolution_clock in Visual Studio 2012 eine höhere Auflösung als beobachtete Messungen?

Susan Sarandon
Susan SarandonOriginal
2024-11-13 14:35:03448Durchsuche

Why does std::chrono::high_resolution_clock in Visual Studio 2012 report a higher resolution than observed measurements?

Inkonsistente Messgenauigkeit mit std::chrono::high_resolution_clock

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn