SHOW:
|
|
- or go back to the newest paste.
1 | #include <windows.h> | |
2 | ||
3 | class CriticalSection | |
4 | { | |
5 | public: | |
6 | CriticalSection() | |
7 | { | |
8 | InitializeCriticalSection(&m_cs); | |
9 | } | |
10 | ~CriticalSection() | |
11 | { | |
12 | DeleteCriticalSection(&m_cs); | |
13 | } | |
14 | void enterCriticalSection() | |
15 | { | |
16 | EnterCriticalSection(&m_cs); | |
17 | } | |
18 | void leaveCriticalSection() | |
19 | { | |
20 | LeaveCriticalSection(&m_cs); | |
21 | } | |
22 | protected: | |
23 | private: | |
24 | CRITICAL_SECTION m_cs; | |
25 | }; | |
26 | ||
27 | template<class T> | |
28 | class SharedMemory | |
29 | { | |
30 | public: | |
31 | SharedMemory() { m_empty = true;} | |
32 | ~SharedMemory() {} | |
33 | ||
34 | T getData(bool& validreturn) | |
35 | { | |
36 | m_cs.enterCriticalSection(); | |
37 | if (m_empty) | |
38 | { | |
39 | m_cs.leaveCriticalSection(); | |
40 | validreturn = false; | |
41 | return T(); | |
42 | } | |
43 | //Data in the shared memory | |
44 | T data = m_data; | |
45 | m_empty = true; | |
46 | m_cs.leaveCriticalSection(); | |
47 | validreturn = true; | |
48 | return data; | |
49 | } | |
50 | bool setData(const T& data) | |
51 | { | |
52 | m_cs.enterCriticalSection(); | |
53 | if (!m_empty) | |
54 | { | |
55 | m_cs.leaveCriticalSection(); | |
56 | return false; | |
57 | } | |
58 | //Shared memory is empty so fill it | |
59 | m_data = data; | |
60 | m_empty = false; | |
61 | m_cs.leaveCriticalSection(); | |
62 | return true; | |
63 | } | |
64 | protected: | |
65 | private: | |
66 | T m_data; | |
67 | bool m_empty; | |
68 | CriticalSection m_cs; | |
69 | }; |