 |
Bitcoin Core
22.99.0
P2P Digital Currency
|
Go to the documentation of this file.
5 #ifndef BITCOIN_SCHEDULER_H
6 #define BITCOIN_SCHEDULER_H
8 #include <condition_variable>
49 schedule(std::move(f), std::chrono::system_clock::now() + delta);
65 void MockForward(std::chrono::seconds delta_seconds);
91 size_t getQueueInfo(std::chrono::system_clock::time_point& first,
92 std::chrono::system_clock::time_point& last)
const;
149 #endif // BITCOIN_SCHEDULER_H
std::condition_variable newTaskScheduled
int nThreadsServicingQueue GUARDED_BY(newTaskMutex)
Simple class for background tasks that should be run periodically or once "after a while".
void MockForward(std::chrono::seconds delta_seconds)
Mock the scheduler to fast forward in time.
CScheduler * m_pscheduler
bool stopWhenEmpty GUARDED_BY(newTaskMutex)
size_t CallbacksPending()
#define WITH_LOCK(cs, code)
Run code while locking a mutex.
void serviceQueue()
Services the queue 'forever'.
SingleThreadedSchedulerClient(CScheduler *pschedulerIn)
size_t getQueueInfo(std::chrono::system_clock::time_point &first, std::chrono::system_clock::time_point &last) const
Returns number of tasks waiting to be serviced, and first and last task times.
std::multimap< std::chrono::system_clock::time_point, Function > taskQueue GUARDED_BY(newTaskMutex)
std::function< void()> Function
bool stopRequested GUARDED_BY(newTaskMutex)
void stop()
Tell any threads running serviceQueue to stop as soon as the current task is done.
void scheduleEvery(Function f, std::chrono::milliseconds delta)
Repeat f until the scheduler is stopped.
std::thread m_service_thread
void EmptyQueue()
Processes all remaining queue members on the calling thread, blocking until queue is empty Must be ca...
void StopWhenDrained()
Tell any threads running serviceQueue to stop when there is no work left to be done.
void AddToProcessQueue(std::function< void()> func)
Add a callback to be executed.
#define EXCLUSIVE_LOCKS_REQUIRED(...)
bool shouldStop() const EXCLUSIVE_LOCKS_REQUIRED(newTaskMutex)
void MaybeScheduleProcessQueue()
void scheduleFromNow(Function f, std::chrono::milliseconds delta)
Call f once after the delta has passed.
Class used by CScheduler clients which may schedule multiple jobs which are required to be run serial...
bool AreThreadsServicingQueue() const
Returns true if there are threads actively running in serviceQueue()
void schedule(Function f, std::chrono::system_clock::time_point t)
Call func at/after time t.
std::list< std::function< void()> > m_callbacks_pending GUARDED_BY(m_callbacks_mutex)