mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-12 15:09:59 +01:00
util: move threadinterrupt into util
This commit is contained in:
36
src/util/threadinterrupt.h
Normal file
36
src/util/threadinterrupt.h
Normal file
@@ -0,0 +1,36 @@
|
||||
// Copyright (c) 2016-2021 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_UTIL_THREADINTERRUPT_H
|
||||
#define BITCOIN_UTIL_THREADINTERRUPT_H
|
||||
|
||||
#include <sync.h>
|
||||
#include <threadsafety.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:
|
||||
using Clock = std::chrono::steady_clock;
|
||||
CThreadInterrupt();
|
||||
explicit operator bool() const;
|
||||
void operator()() EXCLUSIVE_LOCKS_REQUIRED(!mut);
|
||||
void reset();
|
||||
bool sleep_for(Clock::duration rel_time) EXCLUSIVE_LOCKS_REQUIRED(!mut);
|
||||
|
||||
private:
|
||||
std::condition_variable cond;
|
||||
Mutex mut;
|
||||
std::atomic<bool> flag;
|
||||
};
|
||||
|
||||
#endif // BITCOIN_UTIL_THREADINTERRUPT_H
|
||||
Reference in New Issue
Block a user