11using namespace Microsoft::VisualStudio::CppUnitTestFramework;
18 TEST_CLASS_INITIALIZE (ClassInitialize)
20 Logger::WriteMessage (
"WatchDogTimer class initialize.\n");
23 TEST_CLASS_CLEANUP (ClassCleanup)
25 Logger::WriteMessage (
"WatchDogTimer class cleanup.\n");
28 TEST_METHOD_INITIALIZE (MethodInitialize)
30 Logger::WriteMessage (
"WatchDogTimer method initialize.\n");
33 TEST_METHOD_CLEANUP (MethodCleanup)
35 Logger::WriteMessage (
"WatchDogTimer method cleanup.\n");
44 ZeroMemory (_tszMsg,
sizeof (_tszMsg));
47 void Timeup (LPVOID me, DWORD dwHiTime, DWORD dwLoTime)
49 _stprintf_s (_tszMsg, _T (
"--TimeupFunction::Timeup() dwHiTime=%u diff=%u\n"), dwHiTime, dwHiTime - _dwPreviousTime);
50 Logger::WriteMessage (_tszMsg);
51 _dwPreviousTime = dwHiTime;
55 DWORD _dwPreviousTime;
59 TEST_METHOD (WatchDogTimer1)
62 const DWORD cdwTime = 20;
69 BOOL ret1 = T->InitTimer (_T (
"WatchDogTimer1"));
70 Assert::IsTrue (ret1);
76 ZeroMemory (dArray,
sizeof (dArray));
78 Logger::WriteMessage (
"Timer Start.\n");
79 BOOL ret2 = T->StartTimer (cdwTime);
80 Assert::IsTrue (ret2);
82 int iCounter = count - 1;
86 DWORD dwRet = T->WaitTimer ();
89 if (dwRet == WAIT_OBJECT_0)
93 if (iCounter < 0)
break;
99 double minValue = cdwTime;
100 double maxValue = cdwTime;
105 for (
int i = 0; i < count; i++)
107 if (minValue > dArray[i]) minValue = dArray[i];
108 if (maxValue < dArray[i]) maxValue = dArray[i];
111 average = sum / count;
113 for (
int i = 0; i < count; i++)
115 sd += pow (average - dArray[i], 2);
117 sd = pow (sd / count, 0.5);
119 _stprintf_s (tszMsg, _T (
"interval=%d minValue=%.4f maxValue=%.4f average=%.4f sd=%.4f\n"), cdwTime, minValue, maxValue, average, sd);
120 Logger::WriteMessage (tszMsg);
123 for (
int i = 0; i < count; i++)
125 double diff = dArray[i] - cdwTime;
126 if (diff < -0.9 || 0.9 < diff)
129 _stprintf_s (tszMsg, _T (
"i=%3d outband=%3d diff=%.4f\n"), i, outband, diff);
130 Logger::WriteMessage (tszMsg);
135 Logger::WriteMessage (
"Timer Stopped.\n");
138 TEST_METHOD (WatchDogTimer2)
140 const int count = 30;
141 const DWORD cdwTime = 20;
146 BOOL ret1 = T->InitTimer (_T (
"WatchDogTimer2"));
147 Assert::IsTrue (ret1);
152 double dArray[count];
153 ZeroMemory (dArray,
sizeof (dArray));
155 Logger::WriteMessage (
"Timer Start.\n");
156 BOOL ret2 = T->StartTimer (cdwTime);
157 Assert::IsTrue (ret2);
159 int iCounter = count;
163 DWORD dwRet = T->WaitTimer ();
166 if (dwRet == WAIT_OBJECT_0)
174 double minValue = cdwTime;
175 double maxValue = cdwTime;
180 for (
int i = 0; i < count; i++)
182 if (dArray[i] < minValue) minValue = dArray[i];
183 if (dArray[i] > maxValue) maxValue = dArray[i];
186 average = sum / count;
188 for (
int i = 0; i < count; i++)
190 sd += pow (average - dArray[i], 2);
192 sd = pow (sd / count, 0.5);
194 _stprintf_s (tszMsg, _T (
"interval=%d minValue=%.4f maxValue=%.4f average=%.4f sd=%.4f\n"), cdwTime, minValue, maxValue, average, sd);
195 Logger::WriteMessage (tszMsg);
198 for (
int i = 0; i < count; i++)
200 double diff = dArray[i] - cdwTime;
201 if (diff < -0.9 || 0.9 < diff)
204 _stprintf_s (tszMsg, _T (
"i=%3d outband=%3d diff=%.4f\n"), i, outband, diff);
205 Logger::WriteMessage (tszMsg);
210 Logger::WriteMessage (
"Timer Stopped.\n");
スレッドに関するWindowsAPIを集約したクラス
タイマーに関するWindowsAPIを集約したクラス
T *APIENTRY Get() const
管理オブジェクトの取得
bool APIENTRY New(Args... args)
管理オブジェクトの作成
WatchDogTimerクラスのコールバック関数を設定します。