Line data Source code
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 1593 : 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
|