Alternate e697dbe9c5997e35395fe158628dd8c5209481da
for Visual Studio 2022 and Windows 11.
読み取り中…
検索中…
一致する文字列を見つけられません
MutexTest.cpp
[詳解]
1
5
6#include "pch.h"
7#include "Mutex.h"
8#include "Thread.h"
9#include "TString.h"
10
11using namespace Microsoft::VisualStudio::CppUnitTestFramework;
12
13namespace WindowsLibraryTest
14{
15#define MUTEX_NAME _T("MutexTest")
16#define EVENT_NAME _T("EventTest")
17
18 TEST_CLASS (MutexTest)
19 {
20 public:
21 TEST_CLASS_INITIALIZE (ClassInitialize)
22 {
23 Logger::WriteMessage ("MutexTest class initialize.\n");
24 }
25
26 TEST_CLASS_CLEANUP (ClassCleanup)
27 {
28 Logger::WriteMessage ("MutexTest class cleanup.\n");
29 }
30
31 TEST_METHOD_INITIALIZE (MethodInitialize)
32 {
33 Logger::WriteMessage ("MutexTest method initialize.\n");
34 }
35
36 TEST_METHOD_CLEANUP (MethodCleanup)
37 {
38 Logger::WriteMessage ("MutexTest method cleanup.\n");
39 }
40
41 TEST_METHOD (MutexTest1)
42 {
43 auto ThreadFunction = [](LPVOID lpvParam)->DWORD
44 {
45 alt::TString keyword = (LPCTSTR)lpvParam;
46 alt::TString msg;
47 BOOL ret;
48 alt::Mutex mutex;
49 ret = mutex.Open (MUTEX_NAME);
50 Assert::IsTrue (ret, _T("Mutex::Open() failed.\n"));
51
52 msg.Format (_T ("%s start\n"), keyword.Ctr());
53 Logger::WriteMessage (msg.Ctr ());
54
55 for (int i = 0; i < 10; i++)
56 {
57 DWORD dwRet = mutex.Wait ();
58 Assert::AreEqual<DWORD> (WAIT_OBJECT_0, dwRet, _T ("Mutex::Wait() not return WAIT_OBJECT_0.\n"));
59
60 msg.Format (_T ("%s %d.\n"), keyword.Ctr(), i);
61 Logger::WriteMessage (msg.Ctr ());
62
63 Sleep (10);
64
65 ret = mutex.Release ();
66 Assert::IsTrue (ret, _T("Mutex::Release() failed.\n"));
67 }
68
69 msg.Format (_T ("%s stopped.\n"), keyword.Ctr());
70 Logger::WriteMessage (msg.Ctr ());
71
72 return 0;
73 };
74
75 alt::Mutex mutex;
76 alt::Thread MutexThreads[10];
77 HANDLE hMutexs[10] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
78 BOOL ret;
79
80 ret = mutex.Create (MUTEX_NAME);
81 Assert::IsTrue (ret, _T ("Mutex::Create() failed.\n"));
82
83 DWORD dwRet = mutex.Wait ();
84 Assert::AreEqual<DWORD> (WAIT_OBJECT_0, dwRet, _T ("Mutex::Wait() not return WAIT_OBJECT_0.\n"));
85
86 for (int i = 0; i < 10; i++)
87 {
88 alt::TString Keyword;
89 Keyword.Format (_T ("Thread_%02d"), i);
90 ret = MutexThreads[i].Create (ThreadFunction, (LPVOID)Keyword.Ctr());
91 Sleep (10); // このスリープは、スレッドが安全にパラメータを取り込むために設定しています。
92 Assert::IsTrue (ret, _T("Thread::Create() failed.\n"));
93
94 hMutexs[i] = MutexThreads[i].GetHandle ();
95 }
96
97 ret = mutex.Release ();
98 Assert::IsTrue (ret, _T ("Mutex::Release() failed.\n"));
99
100 WaitForMultipleObjects (10, hMutexs, TRUE, INFINITE);
101 }
102 };
103}
ミューテックスに関するWindowsAPIを集約したクラス
#define MUTEX_NAME
Definition: MutexTest.cpp:15
文字列に関するWindowsAPIを集約したクラス
スレッドに関するWindowsAPIを集約したクラス
プリコンパイル済みヘッダー ファイルです。
HANDLE APIENTRY GetHandle() const
継承先はこの関数でハンドルを取得します。
ミューテックスに関するWindowsAPIを集約したクラス
Definition: Mutex.h:16
BOOL APIENTRY Release() const
ミューテックスを解放します。
Definition: Mutex.cpp:26
BOOL APIENTRY Open(LPCTSTR lpctszName)
ミューテックスをオープンします。
Definition: Mutex.cpp:19
BOOL APIENTRY Create(LPCTSTR lpctszName)
ミューテックスを作成します。
Definition: Mutex.cpp:12
文字列に関するWindowsAPIを集約したクラス
Definition: TString.h:17
TString &APIENTRY Format(LPCTSTR format,...)
フォーマットに従ってパラメータを文字列化します。
Definition: TString.cpp:333
LPCTSTR APIENTRY Ctr() const
内部で確保している文字列ポインタを取得します。
Definition: TString.h:46
スレッドに関するWindowsAPIを集約したクラス
Definition: Thread.h:43
BOOL APIENTRY Create(PTHREAD_START_ROUTINE function=NULL, LPVOID lpvParam=NULL, DWORD dwCreationFlag=0)
スレッドを作成します。
Definition: Thread.cpp:24
DWORD APIENTRY Wait(DWORD dwWaitTime=INFINITE) const
シグナル状態になるとブロックを解除します。
TEST_CLASS(ArrayTest)
Definition: ArrayTest.cpp:19