Bitcoin Core 31.99.0
P2P Digital Currency
threadinterrupt.h
Go to the documentation of this file.
1// Copyright (c) 2016-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_THREADINTERRUPT_H
6#define BITCOIN_UTIL_THREADINTERRUPT_H
7
8#include <sync.h>
9
10#include <atomic>
11#include <chrono>
12#include <condition_variable>
13
26{
27public:
28 using Clock = std::chrono::steady_clock;
29
31
32 virtual ~CThreadInterrupt() = default;
33
35 virtual bool interrupted() const;
36
38 virtual explicit operator bool() const;
39
42
44 virtual void reset();
45
49 virtual bool sleep_for(Clock::duration rel_time) EXCLUSIVE_LOCKS_REQUIRED(!mut);
50
51private:
52 std::condition_variable cond;
54 std::atomic<bool> flag;
55};
56
57#endif // BITCOIN_UTIL_THREADINTERRUPT_H
A helper class for interruptible sleeps.
std::chrono::steady_clock Clock
virtual void operator()() EXCLUSIVE_LOCKS_REQUIRED(!mut)
Interrupt any sleeps. After this interrupted() will return true.
virtual void reset()
Reset to an non-interrupted state.
std::atomic< bool > flag
virtual bool sleep_for(Clock::duration rel_time) EXCLUSIVE_LOCKS_REQUIRED(!mut)
Sleep for the given duration.
virtual bool interrupted() const
Return true if operator()() has been called.
std::condition_variable cond
virtual ~CThreadInterrupt()=default
Definition: common.h:29
#define EXCLUSIVE_LOCKS_REQUIRED(...)
Definition: threadsafety.h:49