Chris@102: // waitable_timer.hpp --------------------------------------------------------------// Chris@102: Chris@102: // Copyright 2013 Andrey Semashev Chris@102: Chris@102: // Distributed under the Boost Software License, Version 1.0. Chris@102: // See http://www.boost.org/LICENSE_1_0.txt Chris@102: Chris@102: Chris@102: #ifndef BOOST_DETAIL_WINAPI_WAITABLE_TIMER_HPP Chris@102: #define BOOST_DETAIL_WINAPI_WAITABLE_TIMER_HPP Chris@102: Chris@102: #include Chris@102: Chris@102: #ifdef BOOST_HAS_PRAGMA_ONCE Chris@102: #pragma once Chris@102: #endif Chris@102: Chris@102: namespace boost Chris@102: { Chris@102: namespace detail Chris@102: { Chris@102: namespace winapi Chris@102: { Chris@102: #if defined( BOOST_USE_WINDOWS_H ) Chris@102: Chris@102: typedef ::PTIMERAPCROUTINE PTIMERAPCROUTINE_; Chris@102: Chris@102: # ifdef BOOST_NO_ANSI_APIS Chris@102: using ::CreateWaitableTimerW; Chris@102: using ::OpenWaitableTimerW; Chris@102: # else Chris@102: using ::CreateWaitableTimerA; Chris@102: using ::OpenWaitableTimerA; Chris@102: # endif Chris@102: using ::SetWaitableTimer; Chris@102: using ::CancelWaitableTimer; Chris@102: Chris@102: #else Chris@102: Chris@102: extern "C" { Chris@102: Chris@102: struct _SECURITY_ATTRIBUTES; Chris@102: Chris@102: typedef void (WINAPI* PTIMERAPCROUTINE_) Chris@102: ( Chris@102: LPVOID_ lpArgToCompletionRoutine, Chris@102: DWORD_ dwTimerLowValue, Chris@102: DWORD_ dwTimerHighValue Chris@102: ); Chris@102: Chris@102: # ifdef BOOST_NO_ANSI_APIS Chris@102: __declspec(dllimport) HANDLE_ WINAPI CreateWaitableTimerW Chris@102: ( Chris@102: _SECURITY_ATTRIBUTES* lpTimerAttributes, Chris@102: BOOL_ bManualReset, Chris@102: LPCWSTR_ lpTimerName Chris@102: ); Chris@102: Chris@102: __declspec(dllimport) HANDLE_ WINAPI OpenWaitableTimerW Chris@102: ( Chris@102: DWORD_ dwDesiredAccess, Chris@102: BOOL_ bInheritHandle, Chris@102: LPCWSTR_ lpTimerName Chris@102: ); Chris@102: # else Chris@102: __declspec(dllimport) HANDLE_ WINAPI CreateWaitableTimerA Chris@102: ( Chris@102: _SECURITY_ATTRIBUTES* lpTimerAttributes, Chris@102: BOOL_ bManualReset, Chris@102: LPCSTR_ lpTimerName Chris@102: ); Chris@102: Chris@102: __declspec(dllimport) HANDLE_ WINAPI OpenWaitableTimerA Chris@102: ( Chris@102: DWORD_ dwDesiredAccess, Chris@102: BOOL_ bInheritHandle, Chris@102: LPCSTR_ lpTimerName Chris@102: ); Chris@102: # endif Chris@102: Chris@102: __declspec(dllimport) BOOL_ WINAPI SetWaitableTimer Chris@102: ( Chris@102: HANDLE_ hTimer, Chris@102: const LARGE_INTEGER_ *lpDueTime, Chris@102: LONG_ lPeriod, Chris@102: PTIMERAPCROUTINE_ pfnCompletionRoutine, Chris@102: LPVOID_ lpArgToCompletionRoutine, Chris@102: BOOL_ fResume Chris@102: ); Chris@102: Chris@102: __declspec(dllimport) BOOL_ WINAPI CancelWaitableTimer(HANDLE_ hTimer); Chris@102: Chris@102: } Chris@102: Chris@102: #endif Chris@102: Chris@102: BOOST_FORCEINLINE HANDLE_ create_anonymous_waitable_timer(_SECURITY_ATTRIBUTES* lpTimerAttributes, BOOL_ bManualReset) Chris@102: { Chris@102: #ifdef BOOST_NO_ANSI_APIS Chris@102: return CreateWaitableTimerW(lpTimerAttributes, bManualReset, 0); Chris@102: #else Chris@102: return CreateWaitableTimerA(lpTimerAttributes, bManualReset, 0); Chris@102: #endif Chris@102: } Chris@102: Chris@102: } Chris@102: } Chris@102: } Chris@102: Chris@102: #endif // BOOST_DETAIL_WINAPI_WAITABLE_TIMER_HPP