Bitcoin Core  31.0.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 #include <threadsafety.h>
10 
11 #include <atomic>
12 #include <chrono>
13 #include <condition_variable>
14 
27 {
28 public:
29  using Clock = std::chrono::steady_clock;
30 
32 
33  virtual ~CThreadInterrupt() = default;
34 
36  virtual bool interrupted() const;
37 
39  virtual explicit operator bool() const;
40 
42  virtual void operator()() EXCLUSIVE_LOCKS_REQUIRED(!mut);
43 
45  virtual void reset();
46 
50  virtual bool sleep_for(Clock::duration rel_time) EXCLUSIVE_LOCKS_REQUIRED(!mut);
51 
52 private:
53  std::condition_variable cond;
55  std::atomic<bool> flag;
56 };
57 
58 #endif // BITCOIN_UTIL_THREADINTERRUPT_H
virtual bool sleep_for(Clock::duration rel_time) EXCLUSIVE_LOCKS_REQUIRED(!mut)
Sleep for the given duration.
virtual void operator()() EXCLUSIVE_LOCKS_REQUIRED(!mut)
Interrupt any sleeps. After this interrupted() will return true.
std::condition_variable cond
Definition: common.h:29
std::chrono::steady_clock Clock
std::atomic< bool > flag
A helper class for interruptible sleeps.
virtual void reset()
Reset to an non-interrupted state.
virtual ~CThreadInterrupt()=default
#define EXCLUSIVE_LOCKS_REQUIRED(...)
Definition: threadsafety.h:51
virtual bool interrupted() const
Return true if operator()() has been called.