You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
921 B
34 lines
921 B
// Copyright (c) 2016 The Bitcoin Core developers |
|
// Distributed under the MIT software license, see the accompanying |
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php. |
|
|
|
#ifndef BITCOIN_THREADINTERRUPT_H |
|
#define BITCOIN_THREADINTERRUPT_H |
|
|
|
#include <atomic> |
|
#include <chrono> |
|
#include <condition_variable> |
|
#include <mutex> |
|
|
|
/* |
|
A helper class for interruptible sleeps. Calling operator() will interrupt |
|
any current sleep, and after that point operator bool() will return true |
|
until reset. |
|
*/ |
|
class CThreadInterrupt |
|
{ |
|
public: |
|
explicit operator bool() const; |
|
void operator()(); |
|
void reset(); |
|
bool sleep_for(std::chrono::milliseconds rel_time); |
|
bool sleep_for(std::chrono::seconds rel_time); |
|
bool sleep_for(std::chrono::minutes rel_time); |
|
|
|
private: |
|
std::condition_variable cond; |
|
std::mutex mut; |
|
std::atomic<bool> flag; |
|
}; |
|
|
|
#endif //BITCOIN_THREADINTERRUPT_H
|
|
|