]>
Commit | Line | Data |
---|---|---|
b32b8144 FG |
1 | /* |
2 | * Copyright 2013 Andrey Semashev | |
3 | * | |
4 | * Distributed under the Boost Software License, Version 1.0. | |
5 | * See http://www.boost.org/LICENSE_1_0.txt | |
6 | */ | |
7c673cae | 7 | |
b32b8144 FG |
8 | #ifndef BOOST_WINAPI_WAITABLE_TIMER_HPP_INCLUDED_ |
9 | #define BOOST_WINAPI_WAITABLE_TIMER_HPP_INCLUDED_ | |
7c673cae | 10 | |
b32b8144 | 11 | #include <boost/winapi/basic_types.hpp> |
7c673cae FG |
12 | |
13 | #ifdef BOOST_HAS_PRAGMA_ONCE | |
14 | #pragma once | |
15 | #endif | |
16 | ||
b32b8144 FG |
17 | #if BOOST_WINAPI_PARTITION_APP_SYSTEM |
18 | ||
20effc67 TL |
19 | #include <boost/winapi/detail/header.hpp> |
20 | ||
7c673cae FG |
21 | #if !defined( BOOST_USE_WINDOWS_H ) |
22 | extern "C" { | |
b32b8144 | 23 | typedef boost::winapi::VOID_ |
92f5a8d4 | 24 | (BOOST_WINAPI_WINAPI_CC *PTIMERAPCROUTINE)( |
b32b8144 FG |
25 | boost::winapi::LPVOID_ lpArgToCompletionRoutine, |
26 | boost::winapi::DWORD_ dwTimerLowValue, | |
27 | boost::winapi::DWORD_ dwTimerHighValue); | |
7c673cae FG |
28 | |
29 | #if !defined( BOOST_NO_ANSI_APIS ) | |
20effc67 | 30 | BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC |
7c673cae FG |
31 | CreateWaitableTimerA( |
32 | ::_SECURITY_ATTRIBUTES* lpTimerAttributes, | |
b32b8144 FG |
33 | boost::winapi::BOOL_ bManualReset, |
34 | boost::winapi::LPCSTR_ lpTimerName); | |
7c673cae | 35 | |
20effc67 | 36 | BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC |
7c673cae | 37 | OpenWaitableTimerA( |
b32b8144 FG |
38 | boost::winapi::DWORD_ dwDesiredAccess, |
39 | boost::winapi::BOOL_ bInheritHandle, | |
40 | boost::winapi::LPCSTR_ lpTimerName); | |
7c673cae FG |
41 | #endif |
42 | ||
20effc67 | 43 | BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC |
7c673cae FG |
44 | CreateWaitableTimerW( |
45 | ::_SECURITY_ATTRIBUTES* lpTimerAttributes, | |
b32b8144 FG |
46 | boost::winapi::BOOL_ bManualReset, |
47 | boost::winapi::LPCWSTR_ lpTimerName); | |
7c673cae | 48 | |
20effc67 | 49 | BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC |
7c673cae | 50 | OpenWaitableTimerW( |
b32b8144 FG |
51 | boost::winapi::DWORD_ dwDesiredAccess, |
52 | boost::winapi::BOOL_ bInheritHandle, | |
53 | boost::winapi::LPCWSTR_ lpTimerName); | |
7c673cae | 54 | |
20effc67 | 55 | BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC |
7c673cae | 56 | SetWaitableTimer( |
b32b8144 | 57 | boost::winapi::HANDLE_ hTimer, |
7c673cae | 58 | const ::_LARGE_INTEGER* lpDueTime, |
b32b8144 | 59 | boost::winapi::LONG_ lPeriod, |
7c673cae | 60 | PTIMERAPCROUTINE pfnCompletionRoutine, |
b32b8144 FG |
61 | boost::winapi::LPVOID_ lpArgToCompletionRoutine, |
62 | boost::winapi::BOOL_ fResume); | |
7c673cae | 63 | |
20effc67 | 64 | BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC |
b32b8144 FG |
65 | CancelWaitableTimer(boost::winapi::HANDLE_ hTimer); |
66 | } // extern "C" | |
7c673cae FG |
67 | #endif |
68 | ||
69 | namespace boost { | |
7c673cae FG |
70 | namespace winapi { |
71 | ||
72 | typedef ::PTIMERAPCROUTINE PTIMERAPCROUTINE_; | |
73 | ||
74 | #if !defined( BOOST_NO_ANSI_APIS ) | |
75 | using ::OpenWaitableTimerA; | |
76 | #endif | |
77 | using ::OpenWaitableTimerW; | |
78 | using ::CancelWaitableTimer; | |
79 | ||
80 | #if defined( BOOST_USE_WINDOWS_H ) | |
81 | ||
92f5a8d4 TL |
82 | BOOST_CONSTEXPR_OR_CONST DWORD_ TIMER_ALL_ACCESS_ = TIMER_ALL_ACCESS; |
83 | BOOST_CONSTEXPR_OR_CONST DWORD_ TIMER_MODIFY_STATE_ = TIMER_MODIFY_STATE; | |
84 | BOOST_CONSTEXPR_OR_CONST DWORD_ TIMER_QUERY_STATE_ = TIMER_QUERY_STATE; | |
7c673cae FG |
85 | |
86 | #else // defined( BOOST_USE_WINDOWS_H ) | |
87 | ||
92f5a8d4 TL |
88 | BOOST_CONSTEXPR_OR_CONST DWORD_ TIMER_ALL_ACCESS_ = 0x001F0003; |
89 | BOOST_CONSTEXPR_OR_CONST DWORD_ TIMER_MODIFY_STATE_ = 0x00000002; | |
90 | BOOST_CONSTEXPR_OR_CONST DWORD_ TIMER_QUERY_STATE_ = 0x00000001; | |
7c673cae FG |
91 | |
92 | #endif // defined( BOOST_USE_WINDOWS_H ) | |
93 | ||
92f5a8d4 TL |
94 | BOOST_CONSTEXPR_OR_CONST DWORD_ timer_all_access = TIMER_ALL_ACCESS_; |
95 | BOOST_CONSTEXPR_OR_CONST DWORD_ timer_modify_state = TIMER_MODIFY_STATE_; | |
96 | BOOST_CONSTEXPR_OR_CONST DWORD_ timer_query_state = TIMER_QUERY_STATE_; | |
7c673cae FG |
97 | |
98 | ||
99 | #if !defined( BOOST_NO_ANSI_APIS ) | |
100 | BOOST_FORCEINLINE HANDLE_ CreateWaitableTimerA(PSECURITY_ATTRIBUTES_ lpTimerAttributes, BOOL_ bManualReset, LPCSTR_ lpTimerName) | |
101 | { | |
102 | return ::CreateWaitableTimerA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpTimerAttributes), bManualReset, lpTimerName); | |
103 | } | |
104 | #endif | |
105 | ||
106 | BOOST_FORCEINLINE HANDLE_ CreateWaitableTimerW(PSECURITY_ATTRIBUTES_ lpTimerAttributes, BOOL_ bManualReset, LPCWSTR_ lpTimerName) | |
107 | { | |
108 | return ::CreateWaitableTimerW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpTimerAttributes), bManualReset, lpTimerName); | |
109 | } | |
110 | ||
111 | BOOST_FORCEINLINE BOOL_ SetWaitableTimer( | |
112 | HANDLE_ hTimer, | |
113 | const LARGE_INTEGER_* lpDueTime, | |
114 | LONG_ lPeriod, | |
115 | PTIMERAPCROUTINE_ pfnCompletionRoutine, | |
116 | LPVOID_ lpArgToCompletionRoutine, | |
117 | BOOL_ fResume) | |
118 | { | |
119 | return ::SetWaitableTimer(hTimer, reinterpret_cast< const ::_LARGE_INTEGER* >(lpDueTime), lPeriod, pfnCompletionRoutine, lpArgToCompletionRoutine, fResume); | |
120 | } | |
121 | ||
122 | #if !defined( BOOST_NO_ANSI_APIS ) | |
123 | BOOST_FORCEINLINE HANDLE_ create_waitable_timer(PSECURITY_ATTRIBUTES_ lpTimerAttributes, BOOL_ bManualReset, LPCSTR_ lpTimerName) | |
124 | { | |
125 | return ::CreateWaitableTimerA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpTimerAttributes), bManualReset, lpTimerName); | |
126 | } | |
127 | #endif | |
128 | ||
129 | BOOST_FORCEINLINE HANDLE_ create_waitable_timer(PSECURITY_ATTRIBUTES_ lpTimerAttributes, BOOL_ bManualReset, LPCWSTR_ lpTimerName) | |
130 | { | |
131 | return ::CreateWaitableTimerW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpTimerAttributes), bManualReset, lpTimerName); | |
132 | } | |
133 | ||
134 | BOOST_FORCEINLINE HANDLE_ create_anonymous_waitable_timer(PSECURITY_ATTRIBUTES_ lpTimerAttributes, BOOL_ bManualReset) | |
135 | { | |
136 | #ifdef BOOST_NO_ANSI_APIS | |
137 | return ::CreateWaitableTimerW(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpTimerAttributes), bManualReset, 0); | |
138 | #else | |
139 | return ::CreateWaitableTimerA(reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpTimerAttributes), bManualReset, 0); | |
140 | #endif | |
141 | } | |
142 | ||
7c673cae FG |
143 | } |
144 | } | |
145 | ||
20effc67 TL |
146 | #include <boost/winapi/detail/footer.hpp> |
147 | ||
b32b8144 FG |
148 | #endif // BOOST_WINAPI_PARTITION_APP_SYSTEM |
149 | #endif // BOOST_WINAPI_WAITABLE_TIMER_HPP_INCLUDED_ |