<chrono>: Cache QueryPerformanceFrequency() (#646)

This commit is contained in:
Alex Guteniev 2020-04-01 03:35:28 +03:00 коммит произвёл GitHub
Родитель 90bc6215e4
Коммит 8e8453c677
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
1 изменённых файлов: 10 добавлений и 3 удалений

Просмотреть файл

@ -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