Branch data 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 : 1173 : 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
|