зеркало из https://github.com/microsoft/STL.git
<chrono>: Cache QueryPerformanceFrequency() (#646)
This commit is contained in:
Родитель
90bc6215e4
Коммит
8e8453c677
|
@ -4,6 +4,7 @@
|
|||
// xtime functions
|
||||
|
||||
#include "awint.h"
|
||||
#include <atomic>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <xtimec.h>
|
||||
|
@ -87,9 +88,15 @@ _CRTIMP2_PURE long long __cdecl _Query_perf_counter() { // get current value of
|
|||
}
|
||||
|
||||
_CRTIMP2_PURE long long __cdecl _Query_perf_frequency() { // get frequency of performance counter
|
||||
LARGE_INTEGER li;
|
||||
QueryPerformanceFrequency(&li); // always succeeds
|
||||
return li.QuadPart;
|
||||
static std::atomic<long long> freq_cached{0};
|
||||
long long freq = freq_cached.load(std::memory_order_relaxed);
|
||||
if (freq == 0) {
|
||||
LARGE_INTEGER li;
|
||||
QueryPerformanceFrequency(&li); // always succeeds
|
||||
freq = li.QuadPart; // doesn't change after system boot
|
||||
freq_cached.store(freq, std::memory_order_relaxed);
|
||||
}
|
||||
return freq;
|
||||
}
|
||||
|
||||
_END_EXTERN_C
|
||||
|
|
Загрузка…
Ссылка в новой задаче