1 // Copyright (c) 2016-2019 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_THREADINTERRUPT_H 6 #define BITCOIN_THREADINTERRUPT_H 7 8 #include <sync.h> 9 10 #include <atomic> 11 #include <chrono> 12 #include <condition_variable> 13 14 /* 15 A helper class for interruptible sleeps. Calling operator() will interrupt 16 any current sleep, and after that point operator bool() will return true 17 until reset. 18 */ 19 class CThreadInterrupt 20 { 21 public: 22 CThreadInterrupt(); 23 explicit operator bool() const; 24 void operator()(); 25 void reset(); 26 bool sleep_for(std::chrono::milliseconds rel_time); 27 bool sleep_for(std::chrono::seconds rel_time); 28 bool sleep_for(std::chrono::minutes rel_time); 29 30 private: 31 std::condition_variable cond; 32 Mutex mut; 33 std::atomic<bool> flag; 34 }; 35 36 #endif //BITCOIN_THREADINTERRUPT_H 37