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.
35 lines
921 B
35 lines
921 B
8 years ago
|
// 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
|