Écart de résolution dans std::chrono::high_resolution_clock
Dans un programme de test conçu pour mesurer le temps pris par std::cout, la sortie révèle un écart constamment élevé par rapport à la résolution attendue de 100 nanosecondes de std::chrono::high_resolution_clock. Au lieu de cela, la durée mesurée varie de 1 à 2 microsecondes. Cet écart soulève des questions sur la résolution rapportée et sur la précision de la méthode de mesure du temps.
Facteurs affectant la résolution
La résolution d'une horloge, telle que rapportée par sa période, est la plus petite unité de temps qu’il puisse mesurer. Bien que Visual Studio 2012 inclut une horloge haute résolution, celle-ci manque malheureusement de précision, affichant généralement une résolution d'environ 1 milliseconde. Cela est attribué au fait que Visual Studio 2012 redéfinit high_resolution_clock en system_clock, qui a intrinsèquement une précision inférieure.
Horloge haute résolution alternative pour Visual Studio 2012
Pour répondre Cette limitation, une horloge haute résolution plus précise peut être implémentée à l'aide de la fonction QueryPerformanceCounter fournie par le système d'exploitation. La classe HighResClock fournie ci-dessous résout ce problème en utilisant QueryPerformanceCounter pour offrir une horloge fiable avec une précision de l'ordre de la microseconde :
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; }(); }
Cette horloge alternative peut être intégrée de manière transparente dans le code existant, permettant une mesure du temps haute résolution même dans les contraintes de Visual Studio 2012.
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!