Alternate e697dbe9c5997e35395fe158628dd8c5209481da
for Visual Studio 2022 and Windows 11.
読み取り中…
検索中…
一致する文字列を見つけられません
SharedMemoryTest.cpp
[詳解]
1
5
6#include "pch.h"
7#include "SharedMemory.h"
8#include "Thread.h"
9#include "Mutex.h"
10
11using namespace Microsoft::VisualStudio::CppUnitTestFramework;
12
13namespace WindowsLibraryTest
14{
15 TEST_CLASS (SharedMemoryTest)
16 {
17 public:
18 TEST_CLASS_INITIALIZE (ClassInitialize)
19 {
20 Logger::WriteMessage ("SharedMemoryTest class initialize.\n");
21 }
22
23 TEST_CLASS_CLEANUP (ClassCleanup)
24 {
25 Logger::WriteMessage ("SharedMemoryTest class cleanup.\n");
26 }
27
28 TEST_METHOD_INITIALIZE (MethodInitialize)
29 {
30 Logger::WriteMessage ("SharedMemoryTest method initialize.\n");
31 }
32
33 TEST_METHOD_CLEANUP (MethodCleanup)
34 {
35 Logger::WriteMessage ("SharedMemoryTest method cleanup.\n");
36 }
37
38 TEST_METHOD (SharedMemoryTest1)
39 {
40 alt::Thread thread1;
41 alt::Thread thread2;
42 alt::Mutex mutex;
44
45 auto threadFunc1 = [](LPVOID lpvParam)->DWORD
46 {
48 alt::Mutex mutex;
49 Assert::IsTrue (shmem.Open (_T ("SHMEM")), _T("SharedMemory::Open() failed.\n"));
50 Assert::IsTrue (mutex.Open (_T ("MUTEX")), _T("Mutex::Open() failed.\n"));
51
52 LPVOID lpvMem = shmem.Mapped ();
53 Assert::IsNotNull (lpvMem, _T("SharedMemory::Mapped() failed.\n"));
54
55 for (int i = 0; i < 1000; i++)
56 {
57 mutex.Wait ();
58 FillMemory (lpvMem, 10240, '1');
59 Logger::WriteMessage ("1");
60 mutex.Release ();
61 SwitchToThread ();
62 }
63
64 Assert::IsTrue (shmem.Unmapped (), _T("SharedMemory::Unmapped() failed.\n"));
65
66 return 0;
67 };
68
69 auto threadFunc2 = [](LPVOID lpvParam)->DWORD
70 {
72 alt::Mutex mutex;
73 Assert::IsTrue (shmem.Open (_T ("SHMEM")), _T("SharedMemory::Open() failed.\n"));
74 Assert::IsTrue (mutex.Open (_T ("MUTEX")), _T("Mutex::Open() failed.\n"));
75
76 LPVOID lpvMem = shmem.Mapped ();
77 Assert::IsNotNull (lpvMem, _T("SharedMemory::Mapped() failed.\n"));
78
79 for (int i = 0; i < 1000; i++)
80 {
81 mutex.Wait ();
82 FillMemory (lpvMem, 10240, '2');
83 Logger::WriteMessage ("2");
84 mutex.Release ();
85 SwitchToThread ();
86 }
87
88 Assert::IsTrue (shmem.Unmapped (), _T("SharedMemory::Unmapped() failed.\n"));
89
90 return 0;
91 };
92
93 Assert::IsTrue (mutex.Create (_T ("MUTEX")), _T("Mutex.Create() failed.\n"));
94 Assert::IsTrue (shmem.Create (_T ("SHMEM"), 10240), _T("SharedMemory::Create() failed.\n"));
95
96 Assert::IsTrue (thread1.Create (threadFunc1), _T("Thread::Create() failed.\n"));
97 Assert::IsTrue (thread2.Create (threadFunc2), _T("Thread::Create() failed.\n"));
98
99 HANDLE hThreads[2] = { NULL, NULL };
100 hThreads[0] = thread1.GetHandle ();
101 hThreads[1] = thread2.GetHandle ();
102 WaitForMultipleObjects (2, hThreads, TRUE, INFINITE);
103 }
104 };
105}
ミューテックスに関するWindowsAPIを集約したクラス
共有メモリに関する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: SharedMemory.h:16
BOOL APIENTRY Create(LPCTSTR lpctszName, DWORD dwSize)
共有メモリの作成
BOOL APIENTRY Unmapped()
共有メモリのマッピング終了
LPVOID APIENTRY Mapped()
共有メモリのマッピング開始
BOOL APIENTRY Open(LPCTSTR lpctszName)
共有メモリのオープン
スレッドに関する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