task_runner.h raw
1 // Copyright (c) 2024-present The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5 #ifndef BITCOIN_UTIL_TASK_RUNNER_H
6 #define BITCOIN_UTIL_TASK_RUNNER_H
7
8 #include <cstddef>
9 #include <functional>
10
11 namespace util {
12
13 /** @file
14 * This header provides an interface and simple implementation for a task
15 * runner. Another threaded, serial implementation using a queue is available in
16 * the scheduler module's SerialTaskRunner.
17 */
18
19 class TaskRunnerInterface
20 {
21 public:
22 virtual ~TaskRunnerInterface() = default;
23
24 /**
25 * The callback can either be queued for later/asynchronous/threaded
26 * processing, or be executed immediately for synchronous processing.
27 */
28
29 virtual void insert(std::function<void()> func) = 0;
30
31 /**
32 * Forces the processing of all pending events.
33 */
34 virtual void flush() = 0;
35
36 /**
37 * Returns the number of currently pending events.
38 */
39 virtual size_t size() = 0;
40 };
41
42 class ImmediateTaskRunner : public TaskRunnerInterface
43 {
44 public:
45 void insert(std::function<void()> func) override { func(); }
46 void flush() override {}
47 size_t size() override { return 0; }
48 };
49
50 } // namespace util
51
52 #endif // BITCOIN_UTIL_TASK_RUNNER_H
53