CScheduler boost->std::function, use millisecs for times, not secs
This commit is contained in:
parent
72fb5158b1
commit
73296f54d6
3 changed files with 11 additions and 12 deletions
|
@ -2288,7 +2288,7 @@ bool CConnman::Start(CScheduler& scheduler, std::string& strNodeError, Options c
|
||||||
threadMessageHandler = std::thread(&TraceThread<std::function<void()> >, "msghand", std::function<void()>(std::bind(&CConnman::ThreadMessageHandler, this)));
|
threadMessageHandler = std::thread(&TraceThread<std::function<void()> >, "msghand", std::function<void()>(std::bind(&CConnman::ThreadMessageHandler, this)));
|
||||||
|
|
||||||
// Dump network addresses
|
// Dump network addresses
|
||||||
scheduler.scheduleEvery(boost::bind(&CConnman::DumpData, this), DUMP_ADDRESSES_INTERVAL);
|
scheduler.scheduleEvery(std::bind(&CConnman::DumpData, this), DUMP_ADDRESSES_INTERVAL * 1000);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,20 +104,20 @@ void CScheduler::schedule(CScheduler::Function f, boost::chrono::system_clock::t
|
||||||
newTaskScheduled.notify_one();
|
newTaskScheduled.notify_one();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CScheduler::scheduleFromNow(CScheduler::Function f, int64_t deltaSeconds)
|
void CScheduler::scheduleFromNow(CScheduler::Function f, int64_t deltaMilliSeconds)
|
||||||
{
|
{
|
||||||
schedule(f, boost::chrono::system_clock::now() + boost::chrono::seconds(deltaSeconds));
|
schedule(f, boost::chrono::system_clock::now() + boost::chrono::milliseconds(deltaMilliSeconds));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Repeat(CScheduler* s, CScheduler::Function f, int64_t deltaSeconds)
|
static void Repeat(CScheduler* s, CScheduler::Function f, int64_t deltaMilliSeconds)
|
||||||
{
|
{
|
||||||
f();
|
f();
|
||||||
s->scheduleFromNow(boost::bind(&Repeat, s, f, deltaSeconds), deltaSeconds);
|
s->scheduleFromNow(boost::bind(&Repeat, s, f, deltaMilliSeconds), deltaMilliSeconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CScheduler::scheduleEvery(CScheduler::Function f, int64_t deltaSeconds)
|
void CScheduler::scheduleEvery(CScheduler::Function f, int64_t deltaMilliSeconds)
|
||||||
{
|
{
|
||||||
scheduleFromNow(boost::bind(&Repeat, this, f, deltaSeconds), deltaSeconds);
|
scheduleFromNow(boost::bind(&Repeat, this, f, deltaMilliSeconds), deltaMilliSeconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t CScheduler::getQueueInfo(boost::chrono::system_clock::time_point &first,
|
size_t CScheduler::getQueueInfo(boost::chrono::system_clock::time_point &first,
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue