Jack2 1.9.12

JackWinMutex.h
1 /*
2 Copyright (C) 2004-2008 Grame
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU Lesser General Public License as published by
6 the Free Software Foundation; either version 2.1 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17
18 */
19
20
21 #ifndef __JackWinMutex__
22 #define __JackWinMutex__
23
24 #include "JackCompilerDeps.h"
25 #include "JackException.h"
26 #include <windows.h>
27 #include <stdio.h>
28
29 namespace Jack
30 {
31
35 class SERVER_EXPORT JackBaseWinMutex
36 {
37
38 protected:
39
40 HANDLE fMutex;
41 DWORD fOwner;
42
43 public:
44
45 JackBaseWinMutex():fOwner(0)
46 {
47 // In recursive mode by default
48 fMutex = CreateMutex(NULL, FALSE, NULL);
49 ThrowIf((fMutex == 0), JackException("JackBaseWinMutex: could not init the mutex"));
50 }
51
52 virtual ~JackBaseWinMutex()
53 {
54 CloseHandle(fMutex);
55 }
56
57 bool Lock();
58 bool Trylock();
59 bool Unlock();
60
61 };
62
63 class SERVER_EXPORT JackWinMutex
64 {
65
66 protected:
67
68 HANDLE fMutex;
69
70 public:
71
72 JackWinMutex(const char* name = NULL)
73 {
74 // In recursive mode by default
75 if (name) {
76 char buffer[MAX_PATH];
77 snprintf(buffer, sizeof(buffer), "%s_%s", "JackWinMutex", name);
78 fMutex = CreateMutex(NULL, FALSE, buffer);
79 } else {
80 fMutex = CreateMutex(NULL, FALSE, NULL);
81 }
82
83 ThrowIf((fMutex == 0), JackException("JackWinMutex: could not init the mutex"));
84 }
85
86 virtual ~JackWinMutex()
87 {
88 CloseHandle(fMutex);
89 }
90
91 bool Lock();
92 bool Trylock();
93 bool Unlock();
94
95 };
96
97 class SERVER_EXPORT JackWinCriticalSection
98 {
99
100 protected:
101
102 CRITICAL_SECTION fSection;
103
104 public:
105
106 JackWinCriticalSection(const char* name = NULL)
107 {
108 InitializeCriticalSection(&fSection);
109 }
110
111 virtual ~JackWinCriticalSection()
112 {
113 DeleteCriticalSection(&fSection);
114 }
115
116 bool Lock();
117 bool Trylock();
118 bool Unlock();
119
120 };
121
122
123 } // namespace
124
125 #endif
126
Jack::JackWinMutex
Definition: JackWinMutex.h:63
Jack::JackBaseWinMutex
Mutex abstraction.
Definition: JackWinMutex.h:35
Jack::JackWinCriticalSection
Definition: JackWinMutex.h:97
Jack::JackException
Exception base class.
Definition: JackException.h:43