00001
00017 #ifndef THREADPOOL_TASK_ADAPTERS_HPP_INCLUDED
00018 #define THREADPOOL_TASK_ADAPTERS_HPP_INCLUDED
00019
00020
00021 #include <boost/smart_ptr.hpp>
00022 #include <boost/function.hpp>
00023 #include <boost/thread.hpp>
00024
00025
00026 namespace boost { namespace threadpool
00027 {
00028
00037 typedef function0<void> task_func;
00038
00039
00040
00041
00051 class prio_task_func
00052 {
00053 private:
00054 unsigned int m_priority;
00055 task_func m_function;
00056
00057 public:
00058 typedef void result_type;
00059
00060 public:
00065 prio_task_func(unsigned int const priority, task_func const & function)
00066 : m_priority(priority)
00067 , m_function(function)
00068 {
00069 }
00070
00073 void operator() (void) const
00074 {
00075 if(m_function)
00076 {
00077 m_function();
00078 }
00079 }
00080
00085 bool operator< (const prio_task_func& rhs) const
00086 {
00087 return m_priority < rhs.m_priority;
00088 }
00089
00090 };
00091
00092
00093
00094
00095
00096
00097
00098
00107 class looped_task_func
00108 {
00109 private:
00110 function0<bool> m_function;
00111 unsigned int m_break_s;
00112 unsigned int m_break_ns;
00113
00114 public:
00115 typedef void result_type;
00116
00117 public:
00122 looped_task_func(function0<bool> const & function, unsigned int const interval = 0)
00123 : m_function(function)
00124 {
00125 m_break_s = interval / 1000;
00126 m_break_ns = (interval - m_break_s * 1000) * 1000 * 1000;
00127 }
00128
00131 void operator() (void) const
00132 {
00133 if(m_function)
00134 {
00135 if(m_break_s > 0 || m_break_ns > 0)
00136 {
00137 xtime xt;
00138 xtime_get(&xt, TIME_UTC);
00139 xt.nsec += m_break_ns;
00140 xt.sec += m_break_s;
00141 thread::sleep(xt);
00142 }
00143
00144 while(m_function())
00145 {
00146 if(m_break_s > 0 || m_break_ns > 0)
00147 {
00148 xtime xt;
00149 xtime_get(&xt, TIME_UTC);
00150 xt.nsec += m_break_ns;
00151 xt.sec += m_break_s;
00152 thread::sleep(xt);
00153 }
00154 else
00155 {
00156 thread::yield();
00157 }
00158 }
00159 }
00160 }
00161
00162 };
00163
00164
00165 } }
00166
00167 #endif // THREADPOOL_TASK_ADAPTERS_HPP_INCLUDED
00168