Correct Changelog.
[jack2.git] / windows / JackWinMutex.h
blobacab453df6452f6eb4e3c1702a29210899de92af
1 /*
2 Copyright (C) 2004-2008 Grame
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.
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.
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.
21 #ifndef __JackWinMutex__
22 #define __JackWinMutex__
24 #include "JackCompilerDeps.h"
25 #include "JackException.h"
26 #include <windows.h>
27 #include <stdio.h>
29 namespace Jack
32 /*!
33 \brief Mutex abstraction.
35 class SERVER_EXPORT JackBaseWinMutex
38 protected:
40 HANDLE fMutex;
41 DWORD fOwner;
43 public:
45 JackBaseWinMutex():fOwner(0)
47 // In recursive mode by default
48 fMutex = CreateMutex(NULL, FALSE, NULL);
49 ThrowIf((fMutex == 0), JackException("JackBaseWinMutex: could not init the mutex"));
52 virtual ~JackBaseWinMutex()
54 CloseHandle(fMutex);
57 bool Lock();
58 bool Trylock();
59 bool Unlock();
63 class SERVER_EXPORT JackWinMutex
66 protected:
68 HANDLE fMutex;
70 public:
72 JackWinMutex(const char* name = NULL)
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);
83 ThrowIf((fMutex == 0), JackException("JackWinMutex: could not init the mutex"));
86 virtual ~JackWinMutex()
88 CloseHandle(fMutex);
91 bool Lock();
92 bool Trylock();
93 bool Unlock();
97 class SERVER_EXPORT JackWinCriticalSection
100 protected:
102 CRITICAL_SECTION fSection;
104 public:
106 JackWinCriticalSection(const char* name = NULL)
108 InitializeCriticalSection(&fSection);
111 virtual ~JackWinCriticalSection()
113 DeleteCriticalSection(&fSection);
116 bool Lock();
117 bool Trylock();
118 bool Unlock();
123 } // namespace
125 #endif