View difference between Paste ID: Uxgh6qC8 and ifxh0gY7
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
};