mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-23 05:09:26 +02:00
[util] allow scheduler to be mocked
Add MockForward method to the scheduler that mimics going into the future by rescheduling all items on the taskQueue to be sooner.
This commit is contained in:
@@ -114,6 +114,28 @@ void CScheduler::scheduleFromNow(CScheduler::Function f, int64_t deltaMilliSecon
|
||||
schedule(f, boost::chrono::system_clock::now() + boost::chrono::milliseconds(deltaMilliSeconds));
|
||||
}
|
||||
|
||||
void CScheduler::MockForward(boost::chrono::seconds delta_seconds)
|
||||
{
|
||||
assert(delta_seconds.count() > 0 && delta_seconds < boost::chrono::hours{1});
|
||||
|
||||
{
|
||||
boost::unique_lock<boost::mutex> lock(newTaskMutex);
|
||||
|
||||
// use temp_queue to maintain updated schedule
|
||||
std::multimap<boost::chrono::system_clock::time_point, Function> temp_queue;
|
||||
|
||||
for (const auto& element : taskQueue) {
|
||||
temp_queue.emplace_hint(temp_queue.cend(), element.first - delta_seconds, element.second);
|
||||
}
|
||||
|
||||
// point taskQueue to temp_queue
|
||||
taskQueue = std::move(temp_queue);
|
||||
}
|
||||
|
||||
// notify that the taskQueue needs to be processed
|
||||
newTaskScheduled.notify_one();
|
||||
}
|
||||
|
||||
static void Repeat(CScheduler* s, CScheduler::Function f, int64_t deltaMilliSeconds)
|
||||
{
|
||||
f();
|
||||
|
||||
Reference in New Issue
Block a user