Jack2  1.9.9
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 
Mutex abstraction.
Definition: JackWinMutex.h:35
Exception base class.
Definition: JackException.h:43