Bitcoin Core 28.99.0
P2P Digital Currency
signalinterrupt.h
Go to the documentation of this file.
1// Copyright (c) 2023 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_SIGNALINTERRUPT_H
6#define BITCOIN_UTIL_SIGNALINTERRUPT_H
7
8#ifdef WIN32
9#include <condition_variable>
10#include <mutex>
11#else
12#include <util/tokenpipe.h>
13#endif
14
15#include <atomic>
16#include <cstdlib>
17
18namespace util {
29{
30public:
32 explicit operator bool() const;
33 [[nodiscard]] bool operator()();
34 [[nodiscard]] bool reset();
35 [[nodiscard]] bool wait();
36
37private:
38 std::atomic<bool> m_flag;
39
40#ifndef WIN32
41 // On UNIX-like operating systems use the self-pipe trick.
44#else
45 // On windows use a condition variable, since we don't have any signals there
46 std::mutex m_mutex;
47 std::condition_variable m_cv;
48#endif
49};
50} // namespace util
51
52#endif // BITCOIN_UTIL_SIGNALINTERRUPT_H
One end of a token pipe.
Definition: tokenpipe.h:15
Helper class that manages an interrupt flag, and allows a thread or signal to interrupt another threa...
std::atomic< bool > m_flag