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(); };
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)); }
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!