Changeset View
Changeset View
Standalone View
Standalone View
src/scheduler.cpp
Show First 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | void CScheduler::schedule(CScheduler::Function f, | ||||
boost::chrono::system_clock::time_point t) { | boost::chrono::system_clock::time_point t) { | ||||
{ | { | ||||
boost::unique_lock<boost::mutex> lock(newTaskMutex); | boost::unique_lock<boost::mutex> lock(newTaskMutex); | ||||
taskQueue.insert(std::make_pair(t, f)); | taskQueue.insert(std::make_pair(t, f)); | ||||
} | } | ||||
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, | schedule(f, | ||||
boost::chrono::system_clock::now() + | boost::chrono::system_clock::now() + | ||||
boost::chrono::seconds(deltaSeconds)); | boost::chrono::milliseconds(deltaMilliSeconds)); | ||||
} | } | ||||
static void Repeat(CScheduler *s, CScheduler::Function f, | static void Repeat(CScheduler *s, CScheduler::Function f, | ||||
int64_t deltaSeconds) { | 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, | ||||
scheduleFromNow(boost::bind(&Repeat, this, f, deltaSeconds), deltaSeconds); | int64_t deltaMilliSeconds) { | ||||
scheduleFromNow(boost::bind(&Repeat, this, f, deltaMilliSeconds), | |||||
deltaMilliSeconds); | |||||
} | } | ||||
size_t | size_t | ||||
CScheduler::getQueueInfo(boost::chrono::system_clock::time_point &first, | CScheduler::getQueueInfo(boost::chrono::system_clock::time_point &first, | ||||
boost::chrono::system_clock::time_point &last) const { | boost::chrono::system_clock::time_point &last) const { | ||||
boost::unique_lock<boost::mutex> lock(newTaskMutex); | boost::unique_lock<boost::mutex> lock(newTaskMutex); | ||||
size_t result = taskQueue.size(); | size_t result = taskQueue.size(); | ||||
if (!taskQueue.empty()) { | if (!taskQueue.empty()) { | ||||
first = taskQueue.begin()->first; | first = taskQueue.begin()->first; | ||||
last = taskQueue.rbegin()->first; | last = taskQueue.rbegin()->first; | ||||
} | } | ||||
return result; | return result; | ||||
} | } |