2 // boost/signals2/detail/lwm_win32_cs.hpp
4 // Copyright (c) 2002, 2003 Peter Dimov
5 // Copyright (c) 2008 Frank Mori Hess
6 // Copyright (c) Microsoft Corporation 2014
8 // Distributed under the Boost Software License, Version 1.0. (See
9 // accompanying file LICENSE_1_0.txt or copy at
10 // http://www.boost.org/LICENSE_1_0.txt)
13 #ifndef BOOST_SIGNALS2_LWM_WIN32_CS_HPP
14 #define BOOST_SIGNALS2_LWM_WIN32_CS_HPP
16 // MS compatible compilers support #pragma once
22 #include <boost/assert.hpp>
24 #ifdef BOOST_USE_WINDOWS_H
28 #include <boost/predef/platform.h>
36 #ifndef BOOST_USE_WINDOWS_H
38 struct critical_section
40 struct critical_section_debug * DebugInfo;
46 unsigned __int64 SpinCount;
48 unsigned long SpinCount;
52 #if BOOST_PLAT_WINDOWS_RUNTIME
53 extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSectionEx(critical_section *, unsigned long, unsigned long);
55 extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(critical_section *);
57 extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(critical_section *);
58 extern "C" __declspec(dllimport) int __stdcall TryEnterCriticalSection(critical_section *);
59 extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(critical_section *);
60 extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(critical_section *);
64 typedef ::CRITICAL_SECTION critical_section;
66 #endif // #ifndef BOOST_USE_WINDOWS_H
75 mutex & operator=(mutex const &);
81 #if BOOST_PLAT_WINDOWS_RUNTIME
82 InitializeCriticalSectionEx(&cs_, 4000, 0);
84 InitializeCriticalSection(&cs_);
90 DeleteCriticalSection(&cs_);
95 EnterCriticalSection(&cs_);
97 // TryEnterCriticalSection only exists on Windows NT 4.0 and later
98 #if (defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400))
101 return TryEnterCriticalSection(&cs_) != 0;
112 LeaveCriticalSection(&cs_);
116 } // namespace signals2
120 #endif // #ifndef BOOST_SIGNALS2_LWM_WIN32_CS_HPP