11using namespace Microsoft::VisualStudio::CppUnitTestFramework;
15#define MUTEX_NAME _T("MutexTest")
16#define EVENT_NAME _T("EventTest")
21 TEST_CLASS_INITIALIZE (ClassInitialize)
23 Logger::WriteMessage (
"MutexTest class initialize.\n");
26 TEST_CLASS_CLEANUP (ClassCleanup)
28 Logger::WriteMessage (
"MutexTest class cleanup.\n");
31 TEST_METHOD_INITIALIZE (MethodInitialize)
33 Logger::WriteMessage (
"MutexTest method initialize.\n");
36 TEST_METHOD_CLEANUP (MethodCleanup)
38 Logger::WriteMessage (
"MutexTest method cleanup.\n");
41 TEST_METHOD (MutexTest1)
43 auto ThreadFunction = [](LPVOID lpvParam)->DWORD
50 Assert::IsTrue (ret, _T(
"Mutex::Open() failed.\n"));
52 msg.
Format (_T (
"%s start\n"), keyword.
Ctr());
53 Logger::WriteMessage (msg.
Ctr ());
55 for (
int i = 0; i < 10; i++)
57 DWORD dwRet = mutex.
Wait ();
58 Assert::AreEqual<DWORD> (WAIT_OBJECT_0, dwRet, _T (
"Mutex::Wait() not return WAIT_OBJECT_0.\n"));
60 msg.
Format (_T (
"%s %d.\n"), keyword.
Ctr(), i);
61 Logger::WriteMessage (msg.
Ctr ());
66 Assert::IsTrue (ret, _T(
"Mutex::Release() failed.\n"));
69 msg.
Format (_T (
"%s stopped.\n"), keyword.
Ctr());
70 Logger::WriteMessage (msg.
Ctr ());
77 HANDLE hMutexs[10] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
81 Assert::IsTrue (ret, _T (
"Mutex::Create() failed.\n"));
83 DWORD dwRet = mutex.
Wait ();
84 Assert::AreEqual<DWORD> (WAIT_OBJECT_0, dwRet, _T (
"Mutex::Wait() not return WAIT_OBJECT_0.\n"));
86 for (
int i = 0; i < 10; i++)
89 Keyword.
Format (_T (
"Thread_%02d"), i);
90 ret = MutexThreads[i].
Create (ThreadFunction, (LPVOID)Keyword.
Ctr());
92 Assert::IsTrue (ret, _T(
"Thread::Create() failed.\n"));
94 hMutexs[i] = MutexThreads[i].
GetHandle ();
98 Assert::IsTrue (ret, _T (
"Mutex::Release() failed.\n"));
100 WaitForMultipleObjects (10, hMutexs, TRUE, INFINITE);
ミューテックスに関するWindowsAPIを集約したクラス
文字列に関するWindowsAPIを集約したクラス
スレッドに関するWindowsAPIを集約したクラス
HANDLE APIENTRY GetHandle() const
継承先はこの関数でハンドルを取得します。
ミューテックスに関するWindowsAPIを集約したクラス
BOOL APIENTRY Release() const
ミューテックスを解放します。
BOOL APIENTRY Open(LPCTSTR lpctszName)
ミューテックスをオープンします。
BOOL APIENTRY Create(LPCTSTR lpctszName)
ミューテックスを作成します。
文字列に関するWindowsAPIを集約したクラス
TString &APIENTRY Format(LPCTSTR format,...)
フォーマットに従ってパラメータを文字列化します。
LPCTSTR APIENTRY Ctr() const
内部で確保している文字列ポインタを取得します。
スレッドに関するWindowsAPIを集約したクラス
BOOL APIENTRY Create(PTHREAD_START_ROUTINE function=NULL, LPVOID lpvParam=NULL, DWORD dwCreationFlag=0)
スレッドを作成します。
DWORD APIENTRY Wait(DWORD dwWaitTime=INFINITE) const
シグナル状態になるとブロックを解除します。