OSDN Git Service

post WM_NULL to attached threads on yamy exit to unmap mayu{32,64}.dll
[yamy/yamy.git] / multithread.h
1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r
2 // multithread.h\r
3 \r
4 \r
5 #ifndef _MULTITHREAD_H\r
6 #  define _MULTITHREAD_H\r
7 \r
8 #  include <windows.h>\r
9 \r
10 \r
11 ///\r
12 class SyncObject\r
13 {\r
14 public:\r
15         ///\r
16         virtual void acquire() = 0;\r
17         ///\r
18         virtual void acquire(int ) {\r
19                 acquire();\r
20         }\r
21         ///\r
22         virtual void release() = 0;\r
23 };\r
24 \r
25 \r
26 ///\r
27 class CriticalSection : public SyncObject\r
28 {\r
29         CRITICAL_SECTION m_cs;                  ///\r
30 \r
31 public:\r
32         ///\r
33         CriticalSection() {\r
34                 InitializeCriticalSection(&m_cs);\r
35         }\r
36         ///\r
37         ~CriticalSection() {\r
38                 DeleteCriticalSection(&m_cs);\r
39         }\r
40         ///\r
41         void acquire() {\r
42                 EnterCriticalSection(&m_cs);\r
43         }\r
44         ///\r
45         void release() {\r
46                 LeaveCriticalSection(&m_cs);\r
47         }\r
48 };\r
49 \r
50 \r
51 ///\r
52 class Acquire\r
53 {\r
54         SyncObject *m_so;       ///\r
55 \r
56 public:\r
57         ///\r
58         Acquire(SyncObject *i_so) : m_so(i_so) {\r
59                 m_so->acquire();\r
60         }\r
61         ///\r
62         Acquire(SyncObject *i_so, int i_n) : m_so(i_so) {\r
63                 m_so->acquire(i_n);\r
64         }\r
65         ///\r
66         ~Acquire() {\r
67                 m_so->release();\r
68         }\r
69 };\r
70 \r
71 \r
72 #endif // !_MULTITHREAD_H\r