|
|
@ -10,7 +10,6 @@ |
|
|
|
// boost::thread / boost::function / boost::chrono should be ported to
|
|
|
|
// boost::thread / boost::function / boost::chrono should be ported to
|
|
|
|
// std::thread / std::function / std::chrono when we support C++11.
|
|
|
|
// std::thread / std::function / std::chrono when we support C++11.
|
|
|
|
//
|
|
|
|
//
|
|
|
|
#include <boost/function.hpp> |
|
|
|
|
|
|
|
#include <boost/chrono/chrono.hpp> |
|
|
|
#include <boost/chrono/chrono.hpp> |
|
|
|
#include <boost/thread.hpp> |
|
|
|
#include <boost/thread.hpp> |
|
|
|
#include <map> |
|
|
|
#include <map> |
|
|
@ -23,7 +22,7 @@ |
|
|
|
//
|
|
|
|
//
|
|
|
|
// CScheduler* s = new CScheduler();
|
|
|
|
// CScheduler* s = new CScheduler();
|
|
|
|
// s->scheduleFromNow(doSomething, 11); // Assuming a: void doSomething() { }
|
|
|
|
// s->scheduleFromNow(doSomething, 11); // Assuming a: void doSomething() { }
|
|
|
|
// s->scheduleFromNow(boost::bind(Class::func, this, argument), 3);
|
|
|
|
// s->scheduleFromNow(std::bind(Class::func, this, argument), 3);
|
|
|
|
// boost::thread* t = new boost::thread(boost::bind(CScheduler::serviceQueue, s));
|
|
|
|
// boost::thread* t = new boost::thread(boost::bind(CScheduler::serviceQueue, s));
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// ... then at program shutdown, clean up the thread running serviceQueue:
|
|
|
|
// ... then at program shutdown, clean up the thread running serviceQueue:
|
|
|
@ -39,20 +38,20 @@ public: |
|
|
|
CScheduler(); |
|
|
|
CScheduler(); |
|
|
|
~CScheduler(); |
|
|
|
~CScheduler(); |
|
|
|
|
|
|
|
|
|
|
|
typedef boost::function<void(void)> Function; |
|
|
|
typedef std::function<void(void)> Function; |
|
|
|
|
|
|
|
|
|
|
|
// Call func at/after time t
|
|
|
|
// Call func at/after time t
|
|
|
|
void schedule(Function f, boost::chrono::system_clock::time_point t); |
|
|
|
void schedule(Function f, boost::chrono::system_clock::time_point t); |
|
|
|
|
|
|
|
|
|
|
|
// Convenience method: call f once deltaSeconds from now
|
|
|
|
// Convenience method: call f once deltaSeconds from now
|
|
|
|
void scheduleFromNow(Function f, int64_t deltaSeconds); |
|
|
|
void scheduleFromNow(Function f, int64_t deltaMilliSeconds); |
|
|
|
|
|
|
|
|
|
|
|
// Another convenience method: call f approximately
|
|
|
|
// Another convenience method: call f approximately
|
|
|
|
// every deltaSeconds forever, starting deltaSeconds from now.
|
|
|
|
// every deltaSeconds forever, starting deltaSeconds from now.
|
|
|
|
// To be more precise: every time f is finished, it
|
|
|
|
// To be more precise: every time f is finished, it
|
|
|
|
// is rescheduled to run deltaSeconds later. If you
|
|
|
|
// is rescheduled to run deltaSeconds later. If you
|
|
|
|
// need more accurate scheduling, don't use this method.
|
|
|
|
// need more accurate scheduling, don't use this method.
|
|
|
|
void scheduleEvery(Function f, int64_t deltaSeconds); |
|
|
|
void scheduleEvery(Function f, int64_t deltaMilliSeconds); |
|
|
|
|
|
|
|
|
|
|
|
// To keep things as simple as possible, there is no unschedule.
|
|
|
|
// To keep things as simple as possible, there is no unschedule.
|
|
|
|
|
|
|
|
|
|
|
|