Maison > développement back-end > C++ > le corps du texte

Pourquoi std::chrono::high_resolution_clock dans Visual Studio 2012 signale-t-il une résolution supérieure aux mesures observées ?

Susan Sarandon
Libérer: 2024-11-13 14:35:03
original
433 Les gens l'ont consulté

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

Précision de mesure incohérente avec std::chrono::high_resolution_clock

Question :

Dans le programme de test donné, le std::chrono::high_resolution_clock signale une résolution de 100 nanosecondes, mais le le temps mesuré pris par std::cout dépasse systématiquement 1 microseconde. Pourquoi la résolution attendue ne correspond-elle pas aux mesures observées ?

Réponse :

Si Visual Studio 2012 est utilisé, le std::chrono::high_resolution_clock est de typedef' d à system_clock, qui a une résolution limitée d’environ 1 milliseconde. Cette divergence est à l'origine de l'incohérence observée.

Résolution :

Pour obtenir une synchronisation haute résolution dans Visual Studio 2012, une horloge alternative qui utilise QueryPerformanceCounter doit être utilisée. Le code suivant fournit un exemple :

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();
};
Copier après la connexion

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));
}
Copier après la connexion

Cette HighResClock peut être utilisée de manière interchangeable avec des horloges standard, fournissant la synchronisation haute résolution nécessaire fonctionnalité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal