00001
00002
00003
00004 #ifndef SCOPEDPARALLELEXECUTOR_H
00005 #define SCOPEDPARALLELEXECUTOR_H
00006
00007 #include "dllexport.h"
00008
00009 #include <boost/thread.hpp>
00010 #include <boost/function.hpp>
00011 #include <boost/asio.hpp>
00012
00013 namespace SCS {
00014
00027 class DLL_PUBLIC ScopedParallelExecutor
00028 {
00029 public:
00030 ScopedParallelExecutor();
00031
00036 ScopedParallelExecutor(boost::function<void()> run_function, long run_interval_ms);
00037
00041 ~ScopedParallelExecutor();
00042
00046 void setCallback(boost::function<void()> run_function);
00047
00051 void setRunInterval(long milliseconds);
00052
00057 static void delay(int seconds);
00058
00059 private:
00060 void runFunction();
00061 void runIOService();
00062
00063 private:
00064 boost::function<void()> m_run_function;
00065 long m_run_interval_ms;
00066 boost::asio::io_service m_io_service;
00067 std::auto_ptr<boost::asio::io_service::work> m_work;
00068 boost::thread m_thread;
00069 boost::asio::deadline_timer m_timer;
00070 bool m_stop;
00071 };
00072 }
00073 #endif // SCOPEDPARALLELEXECUTOR_H