Browse Source

CScheduler boost->std::function, use millisecs for times, not secs

0.15
Matt Corallo 8 years ago
parent
commit
73296f54d6
  1. 2
      src/net.cpp
  2. 12
      src/scheduler.cpp
  3. 9
      src/scheduler.h

2
src/net.cpp

@ -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;
} }

12
src/scheduler.cpp

@ -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,

9
src/scheduler.h

@ -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…
Cancel
Save