2 * Copyright 2010 Vicente J. Botet Escriba
3 * Copyright 2015 Andrey Semashev
5 * Distributed under the Boost Software License, Version 1.0.
6 * See http://www.boost.org/LICENSE_1_0.txt
9 #ifndef BOOST_WINAPI_CONDITION_VARIABLE_HPP_INCLUDED_
10 #define BOOST_WINAPI_CONDITION_VARIABLE_HPP_INCLUDED_
12 #include <boost/winapi/config.hpp>
14 #ifdef BOOST_HAS_PRAGMA_ONCE
18 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
20 #include <boost/winapi/basic_types.hpp>
22 #if !defined( BOOST_USE_WINDOWS_H )
24 struct _RTL_CONDITION_VARIABLE;
25 struct _RTL_CRITICAL_SECTION;
28 BOOST_SYMBOL_IMPORT boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
29 InitializeConditionVariable(::_RTL_CONDITION_VARIABLE* ConditionVariable);
31 BOOST_SYMBOL_IMPORT boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
32 WakeConditionVariable(::_RTL_CONDITION_VARIABLE* ConditionVariable);
34 BOOST_SYMBOL_IMPORT boost::winapi::VOID_ BOOST_WINAPI_WINAPI_CC
35 WakeAllConditionVariable(::_RTL_CONDITION_VARIABLE* ConditionVariable);
37 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
38 SleepConditionVariableCS(
39 ::_RTL_CONDITION_VARIABLE* ConditionVariable,
40 ::_RTL_CRITICAL_SECTION* CriticalSection,
41 boost::winapi::DWORD_ dwMilliseconds);
43 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
44 SleepConditionVariableSRW(
45 ::_RTL_CONDITION_VARIABLE* ConditionVariable,
46 ::_RTL_SRWLOCK* SRWLock,
47 boost::winapi::DWORD_ dwMilliseconds,
48 boost::winapi::ULONG_ Flags);
55 typedef struct BOOST_MAY_ALIAS _RTL_CONDITION_VARIABLE {
57 } CONDITION_VARIABLE_, *PCONDITION_VARIABLE_;
59 #if defined( BOOST_USE_WINDOWS_H )
60 #define BOOST_WINAPI_CONDITION_VARIABLE_INIT CONDITION_VARIABLE_INIT
62 #define BOOST_WINAPI_CONDITION_VARIABLE_INIT {0}
65 struct _RTL_CRITICAL_SECTION;
68 BOOST_FORCEINLINE VOID_ InitializeConditionVariable(PCONDITION_VARIABLE_ ConditionVariable)
70 ::InitializeConditionVariable(reinterpret_cast< ::_RTL_CONDITION_VARIABLE* >(ConditionVariable));
73 BOOST_FORCEINLINE VOID_ WakeConditionVariable(PCONDITION_VARIABLE_ ConditionVariable)
75 ::WakeConditionVariable(reinterpret_cast< ::_RTL_CONDITION_VARIABLE* >(ConditionVariable));
78 BOOST_FORCEINLINE VOID_ WakeAllConditionVariable(PCONDITION_VARIABLE_ ConditionVariable)
80 ::WakeAllConditionVariable(reinterpret_cast< ::_RTL_CONDITION_VARIABLE* >(ConditionVariable));
83 BOOST_FORCEINLINE BOOL_ SleepConditionVariableCS(
84 PCONDITION_VARIABLE_ ConditionVariable,
85 _RTL_CRITICAL_SECTION* CriticalSection,
86 DWORD_ dwMilliseconds)
88 return ::SleepConditionVariableCS(
89 reinterpret_cast< ::_RTL_CONDITION_VARIABLE* >(ConditionVariable),
90 reinterpret_cast< ::_RTL_CRITICAL_SECTION* >(CriticalSection),
94 BOOST_FORCEINLINE BOOL_ SleepConditionVariableSRW(
95 PCONDITION_VARIABLE_ ConditionVariable,
96 _RTL_SRWLOCK* SRWLock,
97 DWORD_ dwMilliseconds,
100 return ::SleepConditionVariableSRW(
101 reinterpret_cast< ::_RTL_CONDITION_VARIABLE* >(ConditionVariable),
102 reinterpret_cast< ::_RTL_SRWLOCK* >(SRWLock),
107 #if defined( BOOST_USE_WINDOWS_H )
108 BOOST_CONSTEXPR_OR_CONST ULONG_ CONDITION_VARIABLE_LOCKMODE_SHARED_ = CONDITION_VARIABLE_LOCKMODE_SHARED;
109 #else // defined( BOOST_USE_WINDOWS_H )
110 BOOST_CONSTEXPR_OR_CONST ULONG_ CONDITION_VARIABLE_LOCKMODE_SHARED_ = 0x00000001;
111 #endif // defined( BOOST_USE_WINDOWS_H )
113 BOOST_CONSTEXPR_OR_CONST ULONG_ condition_variable_lockmode_shared = CONDITION_VARIABLE_LOCKMODE_SHARED_;
118 #endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
120 #endif // BOOST_WINAPI_CONDITION_VARIABLE_HPP_INCLUDED_