29 int interval = ::GetPrivateProfileInt (
33 _T (
".\\PerformanceCheck.ini"));
36 _tprintf (_T (
"Not found Interval.\n"));
40 int count = ::GetPrivateProfileInt (
44 _T (
".\\PerformanceCheck.ini"));
47 _tprintf (_T (
"Not found count.\n"));
53 ZeroMemory (data,
sizeof (data));
54 timer->InitTimer (_T (
"DriveWatchDogTimerTest"));
57 timer->StartTimer (interval);
59 for (
int i = 0; i < count; i++)
65 data[i].Tick = interval;
70 GetLocalTime (&data[i].SystemTime);
75 double min = interval;
76 double max = interval;
81 for (
int i = 0; i < count; i++)
83 if (min > data[i].Elapsed) min = data[i].Elapsed;
84 if (max < data[i].Elapsed) max = data[i].Elapsed;
85 sum += data[i].Elapsed;
87 average = sum / count;
89 for (
int i = 0; i < count; i++)
91 sd += pow (average - data[i].Elapsed, 2);
93 sd = pow (sd / count, 0.5);
95 LONGLONG previousStartTick = 0;
98 for (
int i = 0; i < count; i++)
100 if (data[i].Elapsed < (interval - sd) || (interval + sd) < data[i].Elapsed)
102 double loopInterval = (data[i].StartTick.QuadPart - previousStartTick) * 1000.0 / (
double)data[i].Frequency.QuadPart;
103 _tprintf (_T (
"Seq=%3d No.%3d interval=%.4f Elapsed=%.4f diff=%+.4f LocalTime=%02d:%02d:%02d.%03d\n"),
107 data[i].Elapsed - interval,
108 data[i].SystemTime.wHour,
109 data[i].SystemTime.wMinute,
110 data[i].SystemTime.wSecond,
111 data[i].SystemTime.wMilliseconds);
114 previousStartTick = data[i].StartTick.QuadPart;
117 _tprintf (_T (
"min=%.4f max=%.4f average=%.4f sd=%.4f\n"), min, max, average, sd);
122 _tprintf (_T (
"DriveWatchDogTimerTest() OUT.\n"));
タイマーに関するWindowsAPIを集約したクラス