git / moonbite-core / src/threadinterrupt.h · raw

// Copyright (c) 2016-2019 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 <sync.h>#include <atomic>#include <chrono>#include <condition_variable>/*    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:    CThreadInterrupt();    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;    Mutex mut;    std::atomic<bool> flag;};#endif //BITCOIN_THREADINTERRUPT_H