Last active
April 6, 2023 02:17
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cmath> | |
#include <thread> | |
#include <Windows.h> | |
#include <MMSystem.h> | |
#pragma comment(lib, "winmm") | |
struct MultiMediaTimer { | |
static const wchar_t* name; | |
static LARGE_INTEGER elapsed[10000]; | |
static int idx; | |
static MMRESULT handle; | |
static void start(DWORD period) { | |
handle = timeSetEvent(period, 0, [](UINT, UINT, DWORD_PTR, DWORD_PTR, DWORD_PTR) { | |
QueryPerformanceCounter(&elapsed[idx++]); | |
}, 0, TIME_PERIODIC); | |
} | |
static void end() { | |
timeKillEvent(handle); | |
} | |
}; | |
const wchar_t* MultiMediaTimer::name = L"Multi Media Timer"; | |
int MultiMediaTimer::idx; | |
LARGE_INTEGER MultiMediaTimer::elapsed[10000]; | |
MMRESULT MultiMediaTimer::handle; | |
struct TimerQueues { | |
static const wchar_t* name; | |
static LARGE_INTEGER elapsed[10000]; | |
static int idx; | |
static HANDLE handle; | |
static void start(DWORD period) { | |
CreateTimerQueueTimer(&handle, nullptr, [](void*, BOOLEAN) { | |
QueryPerformanceCounter(&elapsed[idx++]); | |
}, nullptr, 0, period, 0); | |
} | |
static void end() { | |
DeleteTimerQueueTimer(nullptr, handle, nullptr); | |
} | |
}; | |
const wchar_t* TimerQueues::name = L"Timer Queues"; | |
int TimerQueues::idx; | |
LARGE_INTEGER TimerQueues::elapsed[10000]; | |
HANDLE TimerQueues::handle; | |
struct ThreadpoolTimer { | |
static const wchar_t* name; | |
static LARGE_INTEGER elapsed[10000]; | |
static int idx; | |
static PTP_TIMER handle; | |
static void start(DWORD period) { | |
handle = CreateThreadpoolTimer([](PTP_CALLBACK_INSTANCE, PVOID, PTP_TIMER) { | |
QueryPerformanceCounter(&elapsed[idx++]); | |
}, nullptr, nullptr); | |
FILETIME dueTime = { 0xFFFFFFFF, 0xFFFFFFFF }; | |
SetThreadpoolTimer(handle, &dueTime, period, 0); | |
} | |
static void end() { | |
CloseThreadpoolTimer(handle); | |
} | |
}; | |
const wchar_t* ThreadpoolTimer::name = L"Thread Pool Timer"; | |
int ThreadpoolTimer::idx; | |
LARGE_INTEGER ThreadpoolTimer::elapsed[10000]; | |
PTP_TIMER ThreadpoolTimer::handle; | |
struct WaitableTimer { | |
static const wchar_t* name; | |
static LARGE_INTEGER elapsed[10000]; | |
static int idx; | |
static std::thread thread; | |
static HANDLE handle; | |
static void start(DWORD period) { | |
thread = std::thread([period]{ | |
handle = CreateWaitableTimerW(nullptr, false, nullptr); | |
LARGE_INTEGER dueTime; | |
dueTime.QuadPart = -1; | |
SetWaitableTimer(handle, &dueTime, period, nullptr, nullptr, true); | |
for (;;) { | |
if (WaitForSingleObject(handle, INFINITE) != WAIT_OBJECT_0) | |
break; | |
QueryPerformanceCounter(&elapsed[idx++]); | |
} | |
}); | |
} | |
static void end() { | |
CloseHandle(handle); | |
thread.join(); | |
} | |
}; | |
const wchar_t* WaitableTimer::name = L"Waitable Timer"; | |
int WaitableTimer::idx; | |
LARGE_INTEGER WaitableTimer::elapsed[10000]; | |
std::thread WaitableTimer::thread; | |
HANDLE WaitableTimer::handle; | |
struct UITimer { | |
static const wchar_t* name; | |
static LARGE_INTEGER elapsed[10000]; | |
static int idx; | |
static std::thread thread; | |
static bool stop; | |
static void start(DWORD period) { | |
stop = false; | |
thread = std::thread([period] { | |
SetTimer(nullptr, 1, period, nullptr); | |
while (!stop) { | |
MSG msg; | |
if (GetMessage(&msg, 0, 0, 0) && msg.message == WM_TIMER) | |
QueryPerformanceCounter(&elapsed[idx++]); | |
} | |
}); | |
} | |
static void end() { | |
stop = true; | |
thread.join(); | |
} | |
}; | |
const wchar_t* UITimer::name = L"SetTimer"; | |
int UITimer::idx; | |
LARGE_INTEGER UITimer::elapsed[10000]; | |
std::thread UITimer::thread; | |
bool UITimer::stop; | |
static LARGE_INTEGER freq; | |
template <class Timer, const LARGE_INTEGER* elapsed = Timer::elapsed> | |
void run(DWORD period) { | |
Timer::idx = 0; | |
Timer::start(period); | |
Sleep(period); | |
auto startIdx = Timer::idx; | |
Sleep(1000); | |
auto endIdx = Timer::idx - 1; | |
Timer::end(); | |
auto count = endIdx - startIdx; | |
auto totaltime = double(elapsed[endIdx].QuadPart - elapsed[startIdx].QuadPart) / freq.QuadPart * 1000; | |
auto avg = totaltime / count; | |
auto error = 0.0; | |
for (auto idx = startIdx; idx < endIdx; idx++) { | |
auto time = double(elapsed[idx + 1].QuadPart - elapsed[idx].QuadPart) / freq.QuadPart; | |
auto off = std::fabs(time - period / totaltime) / (period / totaltime) * 100; | |
error += off; | |
} | |
error /= count; | |
auto stddev = 0.0; | |
for (auto idx = startIdx; idx < endIdx; idx++) { | |
auto time = double(elapsed[idx + 1].QuadPart - elapsed[idx].QuadPart) / freq.QuadPart; | |
auto off = std::fabs(time - period / totaltime) / (period / totaltime) * 100; | |
stddev += (off - error) * (off - error); | |
} | |
stddev = std::sqrt(stddev / (count - 1)); | |
wprintf(L" %-20s: count=%4d, avg=%8.4f, avg error=%8.3f%%, std dev=%7.3f\n", Timer::name, count, avg, error, stddev); | |
} | |
void run() { | |
for (const auto& period : { 100, 50, 20, 10, 5, 2, 1 }) { | |
wprintf(L" Period: %dms\n", period); | |
run<MultiMediaTimer>(period); | |
run<TimerQueues>(period); | |
run<ThreadpoolTimer>(period); | |
run<WaitableTimer>(period); | |
run<UITimer>(period); | |
} | |
} | |
int wmain() { | |
QueryPerformanceFrequency(&freq); | |
wprintf(L"w/ timeBeginPeriod():\n"); | |
timeBeginPeriod(1); | |
run(); | |
timeEndPeriod(1); | |
wprintf(L"\nw/o timeBeginPeriod():\n"); | |
run(); | |
return 0; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
w/ timeBeginPeriod(): | |
Period: 100ms | |
Multi Media Timer : count= 9, avg= 99.9897, avg error= 10.018%, std dev= 0.079 | |
Timer Queues : count= 9, avg= 99.9026, avg error= 10.175%, std dev= 0.235 | |
Thread Pool Timer : count= 9, avg=100.0002, avg error= 10.000%, std dev= 0.497 | |
Waitable Timer : count= 10, avg= 99.9434, avg error= 0.127%, std dev= 0.159 | |
SetTimer : count= 9, avg=109.3903, avg error= 7.696%, std dev= 2.962 | |
Period: 50ms | |
Multi Media Timer : count= 20, avg= 49.9818, avg error= 0.488%, std dev= 0.540 | |
Timer Queues : count= 20, avg= 49.9533, avg error= 0.481%, std dev= 0.586 | |
Thread Pool Timer : count= 19, avg= 50.0006, avg error= 4.998%, std dev= 0.940 | |
Waitable Timer : count= 19, avg= 49.9881, avg error= 5.045%, std dev= 0.287 | |
SetTimer : count= 15, avg= 62.5430, avg error= 17.349%, std dev= 2.152 | |
Period: 20ms | |
Multi Media Timer : count= 49, avg= 19.9880, avg error= 2.412%, std dev= 1.227 | |
Timer Queues : count= 49, avg= 19.9910, avg error= 2.500%, std dev= 1.448 | |
Thread Pool Timer : count= 49, avg= 20.0103, avg error= 2.286%, std dev= 1.530 | |
Waitable Timer : count= 49, avg= 20.0038, avg error= 1.963%, std dev= 0.600 | |
SetTimer : count= 32, avg= 31.1942, avg error= 55.693%, std dev= 10.550 | |
Period: 10ms | |
Multi Media Timer : count= 99, avg= 9.9929, avg error= 2.730%, std dev= 2.660 | |
Timer Queues : count= 99, avg= 9.9969, avg error= 2.540%, std dev= 3.044 | |
Thread Pool Timer : count= 100, avg= 9.9949, avg error= 1.926%, std dev= 2.405 | |
Waitable Timer : count= 99, avg= 10.0013, avg error= 2.409%, std dev= 2.987 | |
SetTimer : count= 62, avg= 15.5139, avg error= 51.318%, std dev= 45.840 | |
Period: 5ms | |
Multi Media Timer : count= 199, avg= 4.9967, avg error= 3.222%, std dev= 4.307 | |
Timer Queues : count= 199, avg= 4.9946, avg error= 3.541%, std dev= 5.567 | |
Thread Pool Timer : count= 199, avg= 4.9997, avg error= 3.211%, std dev= 4.936 | |
Waitable Timer : count= 199, avg= 4.9999, avg error= 5.204%, std dev= 6.404 | |
SetTimer : count= 63, avg= 15.6730, avg error= 209.509%, std dev= 97.202 | |
Period: 2ms | |
Multi Media Timer : count= 499, avg= 2.0002, avg error= 5.569%, std dev= 10.777 | |
Timer Queues : count= 499, avg= 1.9999, avg error= 5.473%, std dev= 11.228 | |
Thread Pool Timer : count= 499, avg= 2.0001, avg error= 5.466%, std dev= 11.067 | |
Waitable Timer : count= 499, avg= 2.0001, avg error= 5.665%, std dev= 10.460 | |
SetTimer : count= 63, avg= 15.7026, avg error= 676.698%, std dev=242.043 | |
Period: 1ms | |
Multi Media Timer : count= 999, avg= 1.0004, avg error= 7.474%, std dev= 18.139 | |
Timer Queues : count= 934, avg= 1.0706, avg error= 7.802%, std dev= 4.677 | |
Thread Pool Timer : count= 936, avg= 1.0677, avg error= 7.226%, std dev= 4.488 | |
Waitable Timer : count= 998, avg= 1.0020, avg error= 0.487%, std dev= 3.073 | |
SetTimer : count= 63, avg= 15.6245, avg error=1437.990%, std dev=506.578 | |
w/o timeBeginPeriod(): | |
Period: 100ms | |
Multi Media Timer : count= 9, avg= 99.9900, avg error= 10.018%, std dev= 0.364 | |
Timer Queues : count= 10, avg= 99.0845, avg error= 7.364%, std dev= 1.839 | |
Thread Pool Timer : count= 10, avg=100.0023, avg error= 7.468%, std dev= 1.612 | |
Waitable Timer : count= 9, avg=101.0332, avg error= 8.131%, std dev= 6.021 | |
SetTimer : count= 9, avg=110.0567, avg error= 9.012%, std dev= 0.772 | |
Period: 50ms | |
Multi Media Timer : count= 19, avg= 50.0053, avg error= 4.980%, std dev= 0.166 | |
Timer Queues : count= 20, avg= 50.0053, avg error= 10.016%, std dev= 7.735 | |
Thread Pool Timer : count= 20, avg= 50.1440, avg error= 9.493%, std dev= 8.129 | |
Waitable Timer : count= 19, avg= 50.0066, avg error= 12.866%, std dev= 5.455 | |
SetTimer : count= 16, avg= 63.0847, avg error= 27.350%, std dev= 3.450 | |
Period: 20ms | |
Multi Media Timer : count= 49, avg= 20.0010, avg error= 2.112%, std dev= 0.863 | |
Timer Queues : count= 49, avg= 19.7819, avg error= 31.542%, std dev= 12.226 | |
Thread Pool Timer : count= 50, avg= 20.0025, avg error= 31.515%, std dev= 15.630 | |
Waitable Timer : count= 50, avg= 20.0014, avg error= 31.519%, std dev= 15.618 | |
SetTimer : count= 31, avg= 31.3598, avg error= 52.433%, std dev= 2.734 | |
Period: 10ms | |
Multi Media Timer : count= 99, avg= 9.9933, avg error= 2.477%, std dev= 2.325 | |
Timer Queues : count= 65, avg= 15.6244, avg error= 58.679%, std dev= 0.808 | |
Thread Pool Timer : count= 64, avg= 15.6262, avg error= 56.274%, std dev= 0.566 | |
Waitable Timer : count= 64, avg= 15.6260, avg error= 56.271%, std dev= 0.542 | |
SetTimer : count= 63, avg= 15.6670, avg error= 54.637%, std dev= 5.118 | |
Period: 5ms | |
Multi Media Timer : count= 199, avg= 4.9971, avg error= 5.072%, std dev= 5.996 | |
Timer Queues : count= 64, avg= 15.6247, avg error= 212.489%, std dev= 1.359 | |
Thread Pool Timer : count= 64, avg= 15.6283, avg error= 212.633%, std dev= 1.221 | |
Waitable Timer : count= 65, avg= 15.6261, avg error= 217.426%, std dev= 1.213 | |
SetTimer : count= 63, avg= 15.6286, avg error= 207.760%, std dev= 1.211 | |
Period: 2ms | |
Multi Media Timer : count= 499, avg= 2.0002, avg error= 5.749%, std dev= 11.303 | |
Timer Queues : count= 64, avg= 15.6257, avg error= 681.319%, std dev= 3.766 | |
Thread Pool Timer : count= 63, avg= 15.6277, avg error= 669.311%, std dev= 3.218 | |
Waitable Timer : count= 63, avg= 15.6281, avg error= 669.344%, std dev= 2.800 | |
SetTimer : count= 63, avg= 15.6259, avg error= 669.128%, std dev= 2.669 | |
Period: 1ms | |
Multi Media Timer : count=1000, avg= 1.0004, avg error= 7.333%, std dev= 17.882 | |
Timer Queues : count= 63, avg= 15.6286, avg error=1438.795%, std dev= 6.414 | |
Thread Pool Timer : count= 64, avg= 15.6261, avg error=1462.726%, std dev= 6.689 | |
Waitable Timer : count= 63, avg= 15.7792, avg error=1468.588%, std dev=121.221 | |
SetTimer : count= 63, avg= 15.8166, avg error=1476.040%, std dev=216.244 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
w/ timeBeginPeriod(): | |
Period: 100ms | |
Multi Media Timer : count= 9, avg=100.0024, avg error= 9.996%, std dev= 0.010 | |
Timer Queues : count= 8, avg=100.0689, avg error= 19.890%, std dev= 0.173 | |
Thread Pool Timer : count= 9, avg= 99.9989, avg error= 10.002%, std dev= 0.004 | |
Waitable Timer : count= 9, avg=100.0008, avg error= 9.999%, std dev= 0.221 | |
SetTimer : count= 9, avg=109.0484, avg error= 7.024%, std dev= 2.618 | |
Period: 50ms | |
Multi Media Timer : count= 19, avg= 50.0000, avg error= 5.000%, std dev= 0.003 | |
Timer Queues : count= 19, avg= 49.9972, avg error= 5.011%, std dev= 0.196 | |
Thread Pool Timer : count= 19, avg= 49.9995, avg error= 5.002%, std dev= 0.200 | |
Waitable Timer : count= 19, avg= 50.0000, avg error= 5.000%, std dev= 0.186 | |
SetTimer : count= 15, avg= 62.3334, avg error= 16.564%, std dev= 2.366 | |
Period: 20ms | |
Multi Media Timer : count= 49, avg= 20.0000, avg error= 2.332%, std dev= 1.735 | |
Timer Queues : count= 50, avg= 19.9998, avg error= 0.011%, std dev= 0.015 | |
Thread Pool Timer : count= 49, avg= 20.0004, avg error= 2.399%, std dev= 1.596 | |
Waitable Timer : count= 49, avg= 20.0000, avg error= 2.120%, std dev= 0.812 | |
SetTimer : count= 31, avg= 31.2263, avg error= 51.137%, std dev= 9.073 | |
Period: 10ms | |
Multi Media Timer : count= 99, avg= 10.0002, avg error= 1.028%, std dev= 0.267 | |
Timer Queues : count= 100, avg= 9.9999, avg error= 0.755%, std dev= 2.852 | |
Thread Pool Timer : count= 99, avg= 10.0001, avg error= 1.169%, std dev= 1.158 | |
Waitable Timer : count= 99, avg= 10.0000, avg error= 1.663%, std dev= 2.424 | |
SetTimer : count= 63, avg= 15.4762, avg error= 53.127%, std dev= 42.746 | |
Period: 5ms | |
Multi Media Timer : count= 199, avg= 5.0001, avg error= 1.719%, std dev= 4.868 | |
Timer Queues : count= 200, avg= 5.0037, avg error= 0.682%, std dev= 2.096 | |
Thread Pool Timer : count= 199, avg= 5.0001, avg error= 1.593%, std dev= 4.415 | |
Waitable Timer : count= 199, avg= 5.0000, avg error= 4.443%, std dev= 17.939 | |
SetTimer : count= 63, avg= 15.6032, avg error= 206.759%, std dev= 95.535 | |
Period: 2ms | |
Multi Media Timer : count= 499, avg= 2.0024, avg error= 2.600%, std dev= 11.490 | |
Timer Queues : count= 500, avg= 1.9999, avg error= 2.952%, std dev= 11.559 | |
Thread Pool Timer : count= 499, avg= 2.0000, avg error= 3.584%, std dev= 12.828 | |
Waitable Timer : count= 499, avg= 2.0000, avg error= 3.210%, std dev= 11.308 | |
SetTimer : count= 63, avg= 15.5396, avg error= 660.664%, std dev=227.952 | |
Period: 1ms | |
Multi Media Timer : count= 999, avg= 1.0000, avg error= 3.842%, std dev= 19.103 | |
Timer Queues : count=1000, avg= 1.0002, avg error= 5.515%, std dev= 22.550 | |
Thread Pool Timer : count= 999, avg= 1.0003, avg error= 3.639%, std dev= 17.089 | |
Waitable Timer : count= 985, avg= 1.0145, avg error= 5.933%, std dev= 25.401 | |
SetTimer : count= 63, avg= 15.6190, avg error=1436.902%, std dev=454.821 | |
w/o timeBeginPeriod(): | |
Period: 100ms | |
Multi Media Timer : count= 9, avg=100.0000, avg error= 10.000%, std dev= 0.007 | |
Timer Queues : count= 10, avg= 99.8410, avg error= 7.518%, std dev= 1.287 | |
Thread Pool Timer : count= 10, avg= 99.8408, avg error= 7.565%, std dev= 1.296 | |
Waitable Timer : count= 10, avg= 99.8403, avg error= 7.540%, std dev= 1.285 | |
SetTimer : count= 9, avg=109.2021, avg error= 7.326%, std dev= 0.028 | |
Period: 50ms | |
Multi Media Timer : count= 19, avg= 50.0000, avg error= 5.000%, std dev= 0.017 | |
Timer Queues : count= 20, avg= 49.9057, avg error= 10.158%, std dev= 7.618 | |
Thread Pool Timer : count= 19, avg= 49.9106, avg error= 13.016%, std dev= 3.374 | |
Waitable Timer : count= 20, avg= 49.9029, avg error= 10.280%, std dev= 7.425 | |
SetTimer : count= 16, avg= 62.4008, avg error= 24.604%, std dev= 0.037 | |
Period: 20ms | |
Multi Media Timer : count= 49, avg= 20.0003, avg error= 1.997%, std dev= 0.025 | |
Timer Queues : count= 50, avg= 20.0035, avg error= 30.906%, std dev= 15.771 | |
Thread Pool Timer : count= 51, avg= 19.8826, avg error= 32.108%, std dev= 17.570 | |
Waitable Timer : count= 50, avg= 19.9623, avg error= 31.182%, std dev= 15.120 | |
SetTimer : count= 31, avg= 31.1993, avg error= 50.877%, std dev= 0.111 | |
Period: 10ms | |
Multi Media Timer : count= 99, avg= 9.9054, avg error= 3.196%, std dev= 9.966 | |
Timer Queues : count= 102, avg= 9.9442, avg error= 73.402%, std dev= 21.392 | |
Thread Pool Timer : count= 101, avg= 9.8853, avg error= 71.605%, std dev= 22.610 | |
Waitable Timer : count= 64, avg= 15.6000, avg error= 55.751%, std dev= 7.632 | |
SetTimer : count= 63, avg= 15.6011, avg error= 53.338%, std dev= 0.305 | |
Period: 5ms | |
Multi Media Timer : count= 199, avg= 4.9447, avg error= 3.286%, std dev= 10.166 | |
Timer Queues : count= 205, avg= 4.9464, avg error= 136.510%, std dev= 54.902 | |
Thread Pool Timer : count= 202, avg= 4.9440, avg error= 134.983%, std dev= 52.510 | |
Waitable Timer : count= 65, avg= 15.6001, avg error= 216.370%, std dev= 13.328 | |
SetTimer : count= 64, avg= 15.5999, avg error= 211.495%, std dev= 5.019 | |
Period: 2ms | |
Multi Media Timer : count= 500, avg= 1.9700, avg error= 4.135%, std dev= 13.594 | |
Timer Queues : count= 499, avg= 2.0014, avg error= 174.153%, std dev=194.395 | |
Thread Pool Timer : count= 506, avg= 1.9735, avg error= 172.604%, std dev=193.527 | |
Waitable Timer : count= 65, avg= 15.5993, avg error= 690.850%, std dev= 35.720 | |
SetTimer : count= 64, avg= 15.6002, avg error= 678.769%, std dev= 1.028 | |
Period: 1ms | |
Multi Media Timer : count=1000, avg= 0.9850, avg error= 6.113%, std dev= 20.545 | |
Timer Queues : count=1015, avg= 1.0000, avg error= 187.594%, std dev=336.914 | |
Thread Pool Timer : count=1029, avg= 0.9857, avg error= 186.939%, std dev=336.261 | |
Waitable Timer : count= 65, avg= 15.5999, avg error=1481.819%, std dev= 2.651 | |
SetTimer : count= 65, avg= 15.6002, avg error=1481.875%, std dev= 74.922 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
w/ timeBeginPeriod(): | |
Period: 100ms | |
Multi Media Timer : count= 9, avg= 99.8987, avg error= 10.182%, std dev= 0.514 | |
Timer Queues : count= 9, avg=100.0163, avg error= 9.971%, std dev= 0.367 | |
Thread Pool Timer : count= 10, avg= 99.9914, avg error= 0.183%, std dev= 0.308 | |
Waitable Timer : count= 9, avg= 99.9975, avg error= 10.005%, std dev= 0.493 | |
SetTimer : count= 8, avg=109.3769, avg error= 4.294%, std dev= 3.046 | |
Period: 50ms | |
Multi Media Timer : count= 19, avg= 50.0028, avg error= 4.989%, std dev= 0.811 | |
Timer Queues : count= 18, avg= 50.0401, avg error= 9.856%, std dev= 0.756 | |
Thread Pool Timer : count= 19, avg= 49.9978, avg error= 5.008%, std dev= 0.290 | |
Waitable Timer : count= 19, avg= 50.0504, avg error= 4.808%, std dev= 0.814 | |
SetTimer : count= 15, avg= 62.4293, avg error= 16.922%, std dev= 1.611 | |
Period: 20ms | |
Multi Media Timer : count= 50, avg= 19.9949, avg error= 0.694%, std dev= 1.288 | |
Timer Queues : count= 49, avg= 19.9994, avg error= 2.162%, std dev= 1.042 | |
Thread Pool Timer : count= 49, avg= 19.9999, avg error= 2.090%, std dev= 0.595 | |
Waitable Timer : count= 49, avg= 19.9940, avg error= 2.221%, std dev= 1.124 | |
SetTimer : count= 31, avg= 31.3076, avg error= 51.925%, std dev= 9.499 | |
Period: 10ms | |
Multi Media Timer : count= 99, avg= 9.9906, avg error= 1.867%, std dev= 2.147 | |
Timer Queues : count= 99, avg= 9.9905, avg error= 1.942%, std dev= 1.992 | |
Thread Pool Timer : count= 99, avg= 9.9997, avg error= 1.300%, std dev= 1.506 | |
Waitable Timer : count= 99, avg= 9.9997, avg error= 1.226%, std dev= 1.067 | |
SetTimer : count= 63, avg= 15.5384, avg error= 53.507%, std dev= 47.915 | |
Period: 5ms | |
Multi Media Timer : count= 199, avg= 5.0001, avg error= 0.745%, std dev= 1.699 | |
Timer Queues : count= 199, avg= 4.9952, avg error= 1.276%, std dev= 3.149 | |
Thread Pool Timer : count= 199, avg= 5.0001, avg error= 0.749%, std dev= 1.694 | |
Waitable Timer : count= 199, avg= 5.0001, avg error= 1.285%, std dev= 3.320 | |
SetTimer : count= 63, avg= 15.5373, avg error= 204.173%, std dev= 99.389 | |
Period: 2ms | |
Multi Media Timer : count= 499, avg= 1.9998, avg error= 4.666%, std dev= 11.551 | |
Timer Queues : count= 499, avg= 2.0000, avg error= 2.607%, std dev= 9.545 | |
Thread Pool Timer : count= 500, avg= 2.0000, avg error= 5.222%, std dev= 12.641 | |
Waitable Timer : count= 499, avg= 2.0020, avg error= 5.052%, std dev= 11.958 | |
SetTimer : count= 63, avg= 15.6529, avg error= 671.790%, std dev=251.081 | |
Period: 1ms | |
Multi Media Timer : count=1000, avg= 1.0007, avg error= 0.301%, std dev= 0.532 | |
Timer Queues : count= 999, avg= 1.0007, avg error= 0.260%, std dev= 0.848 | |
Thread Pool Timer : count= 999, avg= 1.0007, avg error= 0.214%, std dev= 0.447 | |
Waitable Timer : count=1000, avg= 1.0007, avg error= 0.224%, std dev= 0.298 | |
SetTimer : count= 63, avg= 15.5656, avg error=1426.421%, std dev=491.685 | |
w/o timeBeginPeriod(): | |
Period: 100ms | |
Multi Media Timer : count= 9, avg=100.0669, avg error= 9.880%, std dev= 0.002 | |
Timer Queues : count= 9, avg= 98.9785, avg error= 11.829%, std dev= 6.930 | |
Thread Pool Timer : count= 9, avg= 98.9505, avg error= 11.879%, std dev= 6.964 | |
Waitable Timer : count= 9, avg=100.6981, avg error= 8.739%, std dev= 7.465 | |
SetTimer : count= 9, avg=108.5452, avg error= 7.481%, std dev= 2.105 | |
Period: 50ms | |
Multi Media Timer : count= 19, avg= 50.0124, avg error= 4.953%, std dev= 0.437 | |
Timer Queues : count= 19, avg= 50.1676, avg error= 12.443%, std dev= 3.581 | |
Thread Pool Timer : count= 19, avg= 49.3438, avg error= 12.910%, std dev= 1.910 | |
Waitable Timer : count= 19, avg= 49.3450, avg error= 12.904%, std dev= 1.911 | |
SetTimer : count= 16, avg= 61.9325, avg error= 22.740%, std dev= 4.529 | |
Period: 20ms | |
Multi Media Timer : count= 49, avg= 20.0116, avg error= 1.886%, std dev= 0.060 | |
Timer Queues : count= 49, avg= 19.7711, avg error= 31.495%, std dev= 12.076 | |
Thread Pool Timer : count= 48, avg= 19.8580, avg error= 31.889%, std dev= 10.526 | |
Waitable Timer : count= 49, avg= 20.0904, avg error= 31.862%, std dev= 14.027 | |
SetTimer : count= 31, avg= 31.2512, avg error= 51.379%, std dev= 0.192 | |
Period: 10ms | |
Multi Media Timer : count= 99, avg= 10.0056, avg error= 0.900%, std dev= 0.224 | |
Timer Queues : count= 63, avg= 15.6257, avg error= 53.823%, std dev= 0.315 | |
Thread Pool Timer : count= 63, avg= 15.6257, avg error= 53.823%, std dev= 0.130 | |
Waitable Timer : count= 63, avg= 15.6271, avg error= 53.851%, std dev= 0.150 | |
SetTimer : count= 63, avg= 15.6243, avg error= 53.795%, std dev= 0.398 | |
Period: 5ms | |
Multi Media Timer : count= 199, avg= 5.0030, avg error= 0.528%, std dev= 1.307 | |
Timer Queues : count= 63, avg= 15.6254, avg error= 207.632%, std dev= 0.360 | |
Thread Pool Timer : count= 63, avg= 15.6256, avg error= 207.642%, std dev= 0.301 | |
Waitable Timer : count= 63, avg= 15.6257, avg error= 207.644%, std dev= 0.129 | |
SetTimer : count= 63, avg= 15.6252, avg error= 207.625%, std dev= 0.304 | |
Period: 2ms | |
Multi Media Timer : count= 499, avg= 2.0015, avg error= 1.419%, std dev= 7.135 | |
Timer Queues : count= 63, avg= 15.6264, avg error= 669.186%, std dev= 1.065 | |
Thread Pool Timer : count= 63, avg= 15.6270, avg error= 669.240%, std dev= 2.498 | |
Waitable Timer : count= 64, avg= 15.6258, avg error= 681.326%, std dev= 1.608 | |
SetTimer : count= 64, avg= 15.6238, avg error= 681.127%, std dev= 1.489 | |
Period: 1ms | |
Multi Media Timer : count= 999, avg= 1.0007, avg error= 0.141%, std dev= 0.768 | |
Timer Queues : count= 62, avg= 15.8776, avg error=1463.005%, std dev=205.352 | |
Thread Pool Timer : count= 63, avg= 15.6256, avg error=1438.196%, std dev= 1.204 | |
Waitable Timer : count= 63, avg= 15.6258, avg error=1438.250%, std dev= 1.362 | |
SetTimer : count= 63, avg= 15.6591, avg error=1444.799%, std dev=118.433 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment