source: src/WinAPIWaitableTimer.hpp @ 268

Revision 268, 1.3 KB checked in by Eoin, 12 years ago (diff)

Added copyright eventually.

Line 
1
2//         Copyright Eóin O'Callaghan 2006 - 2007.
3// Distributed under the Boost Software License, Version 1.0.
4//    (See accompanying file LICENSE_1_0.txt or copy at
5//          http://www.boost.org/LICENSE_1_0.txt)
6
7#pragma once
8
9#include <boost/function.hpp>
10#include <boost/cstdint.hpp>
11
12inline void CALLBACK TimerProc(void* lpParametar, BOOLEAN TimerOrWaitFired);
13
14class WinAPIWaitableTimer
15{
16public:
17        WinAPIWaitableTimer() :
18                timer_(INVALID_HANDLE_VALUE)
19        {}
20       
21        ~WinAPIWaitableTimer()
22        {
23                if (timer_ != INVALID_HANDLE_VALUE) deleteTimer();
24        }
25       
26        bool reset(unsigned dueTime, unsigned period, boost::function<void ()> fn)
27        {
28                if (timer_ != INVALID_HANDLE_VALUE) deleteTimer();
29               
30                fn_ = fn;
31               
32                return ::CreateTimerQueueTimer(
33                        &timer_,
34                        NULL,
35                        &TimerProc,
36                        (LPVOID)this,
37                        dueTime, 
38                        period, 
39                        WT_EXECUTEINTIMERTHREAD);
40        }
41
42private:
43        void deleteTimer()
44        {
45                ::DeleteTimerQueueTimer(NULL, timer_, NULL); 
46                ::CloseHandle (timer_);
47                timer_ = INVALID_HANDLE_VALUE; 
48        }
49       
50        HANDLE timer_;
51        boost::function<void ()> fn_;
52       
53        friend void CALLBACK TimerProc(void* lpParametar, BOOLEAN TimerOrWaitFired);
54};
55
56inline void CALLBACK TimerProc(void* lpParametar, BOOLEAN TimerOrWaitFired)
57{
58        WinAPIWaitableTimer* timer_event = (WinAPIWaitableTimer*)lpParametar;
59       
60        timer_event->fn_();
61}
Note: See TracBrowser for help on using the repository browser.