diff --git a/stl/src/xtime.cpp b/stl/src/xtime.cpp index f39d35031e0..015e259c766 100644 --- a/stl/src/xtime.cpp +++ b/stl/src/xtime.cpp @@ -4,6 +4,7 @@ // xtime functions #include "awint.h" +#include #include #include #include @@ -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 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