Statistics
| Revision:

root / tmp / org.txm.statsengine.r.core.win32 / res / win32 / library / BH / include / boost / asio / detail / winrt_timer_scheduler.hpp @ 2486

History | View | Annotate | Download (4.1 kB)

1
//
2
// detail/winrt_timer_scheduler.hpp
3
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
//
5
// Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6
//
7
// Distributed under the Boost Software License, Version 1.0. (See accompanying
8
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9
//
10

    
11
#ifndef BOOST_ASIO_DETAIL_WINRT_TIMER_SCHEDULER_HPP
12
#define BOOST_ASIO_DETAIL_WINRT_TIMER_SCHEDULER_HPP
13

    
14
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
15
# pragma once
16
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17

    
18
#include <boost/asio/detail/config.hpp>
19

    
20
#if defined(BOOST_ASIO_WINDOWS_RUNTIME)
21

    
22
#include <cstddef>
23
#include <boost/asio/detail/event.hpp>
24
#include <boost/asio/detail/limits.hpp>
25
#include <boost/asio/detail/mutex.hpp>
26
#include <boost/asio/detail/op_queue.hpp>
27
#include <boost/asio/detail/thread.hpp>
28
#include <boost/asio/detail/timer_queue_base.hpp>
29
#include <boost/asio/detail/timer_queue_set.hpp>
30
#include <boost/asio/detail/wait_op.hpp>
31
#include <boost/asio/io_service.hpp>
32

    
33
#if defined(BOOST_ASIO_HAS_IOCP)
34
# include <boost/asio/detail/thread.hpp>
35
#endif // defined(BOOST_ASIO_HAS_IOCP)
36

    
37
#include <boost/asio/detail/push_options.hpp>
38

    
39
namespace boost {
40
namespace asio {
41
namespace detail {
42

    
43
class winrt_timer_scheduler
44
  : public boost::asio::detail::service_base<winrt_timer_scheduler>
45
{
46
public:
47
  // Constructor.
48
  BOOST_ASIO_DECL winrt_timer_scheduler(boost::asio::io_service& io_service);
49

    
50
  // Destructor.
51
  BOOST_ASIO_DECL ~winrt_timer_scheduler();
52

    
53
  // Destroy all user-defined handler objects owned by the service.
54
  BOOST_ASIO_DECL void shutdown_service();
55

    
56
  // Recreate internal descriptors following a fork.
57
  BOOST_ASIO_DECL void fork_service(
58
      boost::asio::io_service::fork_event fork_ev);
59

    
60
  // Initialise the task. No effect as this class uses its own thread.
61
  BOOST_ASIO_DECL void init_task();
62

    
63
  // Add a new timer queue to the reactor.
64
  template <typename Time_Traits>
65
  void add_timer_queue(timer_queue<Time_Traits>& queue);
66

    
67
  // Remove a timer queue from the reactor.
68
  template <typename Time_Traits>
69
  void remove_timer_queue(timer_queue<Time_Traits>& queue);
70

    
71
  // Schedule a new operation in the given timer queue to expire at the
72
  // specified absolute time.
73
  template <typename Time_Traits>
74
  void schedule_timer(timer_queue<Time_Traits>& queue,
75
      const typename Time_Traits::time_type& time,
76
      typename timer_queue<Time_Traits>::per_timer_data& timer, wait_op* op);
77

    
78
  // Cancel the timer operations associated with the given token. Returns the
79
  // number of operations that have been posted or dispatched.
80
  template <typename Time_Traits>
81
  std::size_t cancel_timer(timer_queue<Time_Traits>& queue,
82
      typename timer_queue<Time_Traits>::per_timer_data& timer,
83
      std::size_t max_cancelled = (std::numeric_limits<std::size_t>::max)());
84

    
85
private:
86
  // Run the select loop in the thread.
87
  BOOST_ASIO_DECL void run_thread();
88

    
89
  // Entry point for the select loop thread.
90
  BOOST_ASIO_DECL static void call_run_thread(winrt_timer_scheduler* reactor);
91

    
92
  // Helper function to add a new timer queue.
93
  BOOST_ASIO_DECL void do_add_timer_queue(timer_queue_base& queue);
94

    
95
  // Helper function to remove a timer queue.
96
  BOOST_ASIO_DECL void do_remove_timer_queue(timer_queue_base& queue);
97

    
98
  // The io_service implementation used to post completions.
99
  io_service_impl& io_service_;
100

    
101
  // Mutex used to protect internal variables.
102
  boost::asio::detail::mutex mutex_;
103

    
104
  // Event used to wake up background thread.
105
  boost::asio::detail::event event_;
106

    
107
  // The timer queues.
108
  timer_queue_set timer_queues_;
109

    
110
  // The background thread that is waiting for timers to expire.
111
  boost::asio::detail::thread* thread_;
112

    
113
  // Does the background thread need to stop.
114
  bool stop_thread_;
115

    
116
  // Whether the service has been shut down.
117
  bool shutdown_;
118
};
119

    
120
} // namespace detail
121
} // namespace asio
122
} // namespace boost
123

    
124
#include <boost/asio/detail/pop_options.hpp>
125

    
126
#include <boost/asio/detail/impl/winrt_timer_scheduler.hpp>
127
#if defined(BOOST_ASIO_HEADER_ONLY)
128
# include <boost/asio/detail/impl/winrt_timer_scheduler.ipp>
129
#endif // defined(BOOST_ASIO_HEADER_ONLY)
130

    
131
#endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
132

    
133
#endif // BOOST_ASIO_DETAIL_WINRT_TIMER_SCHEDULER_HPP