Chris@102
|
1 // waitable_timer.hpp --------------------------------------------------------------//
|
Chris@102
|
2
|
Chris@102
|
3 // Copyright 2013 Andrey Semashev
|
Chris@102
|
4
|
Chris@102
|
5 // Distributed under the Boost Software License, Version 1.0.
|
Chris@102
|
6 // See http://www.boost.org/LICENSE_1_0.txt
|
Chris@102
|
7
|
Chris@102
|
8
|
Chris@102
|
9 #ifndef BOOST_DETAIL_WINAPI_WAITABLE_TIMER_HPP
|
Chris@102
|
10 #define BOOST_DETAIL_WINAPI_WAITABLE_TIMER_HPP
|
Chris@102
|
11
|
Chris@102
|
12 #include <boost/detail/winapi/basic_types.hpp>
|
Chris@102
|
13
|
Chris@102
|
14 #ifdef BOOST_HAS_PRAGMA_ONCE
|
Chris@102
|
15 #pragma once
|
Chris@102
|
16 #endif
|
Chris@102
|
17
|
Chris@102
|
18 namespace boost
|
Chris@102
|
19 {
|
Chris@102
|
20 namespace detail
|
Chris@102
|
21 {
|
Chris@102
|
22 namespace winapi
|
Chris@102
|
23 {
|
Chris@102
|
24 #if defined( BOOST_USE_WINDOWS_H )
|
Chris@102
|
25
|
Chris@102
|
26 typedef ::PTIMERAPCROUTINE PTIMERAPCROUTINE_;
|
Chris@102
|
27
|
Chris@102
|
28 # ifdef BOOST_NO_ANSI_APIS
|
Chris@102
|
29 using ::CreateWaitableTimerW;
|
Chris@102
|
30 using ::OpenWaitableTimerW;
|
Chris@102
|
31 # else
|
Chris@102
|
32 using ::CreateWaitableTimerA;
|
Chris@102
|
33 using ::OpenWaitableTimerA;
|
Chris@102
|
34 # endif
|
Chris@102
|
35 using ::SetWaitableTimer;
|
Chris@102
|
36 using ::CancelWaitableTimer;
|
Chris@102
|
37
|
Chris@102
|
38 #else
|
Chris@102
|
39
|
Chris@102
|
40 extern "C" {
|
Chris@102
|
41
|
Chris@102
|
42 struct _SECURITY_ATTRIBUTES;
|
Chris@102
|
43
|
Chris@102
|
44 typedef void (WINAPI* PTIMERAPCROUTINE_)
|
Chris@102
|
45 (
|
Chris@102
|
46 LPVOID_ lpArgToCompletionRoutine,
|
Chris@102
|
47 DWORD_ dwTimerLowValue,
|
Chris@102
|
48 DWORD_ dwTimerHighValue
|
Chris@102
|
49 );
|
Chris@102
|
50
|
Chris@102
|
51 # ifdef BOOST_NO_ANSI_APIS
|
Chris@102
|
52 __declspec(dllimport) HANDLE_ WINAPI CreateWaitableTimerW
|
Chris@102
|
53 (
|
Chris@102
|
54 _SECURITY_ATTRIBUTES* lpTimerAttributes,
|
Chris@102
|
55 BOOL_ bManualReset,
|
Chris@102
|
56 LPCWSTR_ lpTimerName
|
Chris@102
|
57 );
|
Chris@102
|
58
|
Chris@102
|
59 __declspec(dllimport) HANDLE_ WINAPI OpenWaitableTimerW
|
Chris@102
|
60 (
|
Chris@102
|
61 DWORD_ dwDesiredAccess,
|
Chris@102
|
62 BOOL_ bInheritHandle,
|
Chris@102
|
63 LPCWSTR_ lpTimerName
|
Chris@102
|
64 );
|
Chris@102
|
65 # else
|
Chris@102
|
66 __declspec(dllimport) HANDLE_ WINAPI CreateWaitableTimerA
|
Chris@102
|
67 (
|
Chris@102
|
68 _SECURITY_ATTRIBUTES* lpTimerAttributes,
|
Chris@102
|
69 BOOL_ bManualReset,
|
Chris@102
|
70 LPCSTR_ lpTimerName
|
Chris@102
|
71 );
|
Chris@102
|
72
|
Chris@102
|
73 __declspec(dllimport) HANDLE_ WINAPI OpenWaitableTimerA
|
Chris@102
|
74 (
|
Chris@102
|
75 DWORD_ dwDesiredAccess,
|
Chris@102
|
76 BOOL_ bInheritHandle,
|
Chris@102
|
77 LPCSTR_ lpTimerName
|
Chris@102
|
78 );
|
Chris@102
|
79 # endif
|
Chris@102
|
80
|
Chris@102
|
81 __declspec(dllimport) BOOL_ WINAPI SetWaitableTimer
|
Chris@102
|
82 (
|
Chris@102
|
83 HANDLE_ hTimer,
|
Chris@102
|
84 const LARGE_INTEGER_ *lpDueTime,
|
Chris@102
|
85 LONG_ lPeriod,
|
Chris@102
|
86 PTIMERAPCROUTINE_ pfnCompletionRoutine,
|
Chris@102
|
87 LPVOID_ lpArgToCompletionRoutine,
|
Chris@102
|
88 BOOL_ fResume
|
Chris@102
|
89 );
|
Chris@102
|
90
|
Chris@102
|
91 __declspec(dllimport) BOOL_ WINAPI CancelWaitableTimer(HANDLE_ hTimer);
|
Chris@102
|
92
|
Chris@102
|
93 }
|
Chris@102
|
94
|
Chris@102
|
95 #endif
|
Chris@102
|
96
|
Chris@102
|
97 BOOST_FORCEINLINE HANDLE_ create_anonymous_waitable_timer(_SECURITY_ATTRIBUTES* lpTimerAttributes, BOOL_ bManualReset)
|
Chris@102
|
98 {
|
Chris@102
|
99 #ifdef BOOST_NO_ANSI_APIS
|
Chris@102
|
100 return CreateWaitableTimerW(lpTimerAttributes, bManualReset, 0);
|
Chris@102
|
101 #else
|
Chris@102
|
102 return CreateWaitableTimerA(lpTimerAttributes, bManualReset, 0);
|
Chris@102
|
103 #endif
|
Chris@102
|
104 }
|
Chris@102
|
105
|
Chris@102
|
106 }
|
Chris@102
|
107 }
|
Chris@102
|
108 }
|
Chris@102
|
109
|
Chris@102
|
110 #endif // BOOST_DETAIL_WINAPI_WAITABLE_TIMER_HPP
|