190bf62be1
Call sync.h primitives "locks" and "mutexes" instead of "blocks" and "waitable critical sections" to match current coding conventions and c++11 standard names. This PR does not rename the "CCriticalSection" class (though this could be done as a followup) because it is used everywhere and would swamp the other changes in this PR. Plain mutexes should mostly be preferred instead of recursive mutexes in new code anyway. -BEGIN VERIFY SCRIPT- set -x set -e ren() { git grep -l $1 | xargs sed -i s/$1/$2/; } ren CCriticalBlock UniqueLock ren CWaitableCriticalSection Mutex ren CConditionVariable std::condition_variable ren cs_GenesisWait g_genesis_wait_mutex ren condvar_GenesisWait g_genesis_wait_cv perl -0777 -pi -e 's/.*typedef.*condition_variable.*\n\n?//g' src/sync.h -END VERIFY SCRIPT-
37 lines
964 B
C++
37 lines
964 B
C++
// Copyright (c) 2016-2017 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>
|
|
#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:
|
|
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
|