Line data Source code
1 : // Copyright (c) 2009-2010 Satoshi Nakamoto 2 : // Copyright (c) 2009-2016 The Bitcoin Core developers 3 : // Distributed under the MIT software license, see the accompanying 4 : // file COPYING or http://www.opensource.org/licenses/mit-license.php. 5 : 6 : #include "threadinterrupt.h" 7 : 8 1570270 : CThreadInterrupt::operator bool() const 9 : { 10 1570270 : return flag.load(std::memory_order_acquire); 11 : } 12 : 13 999 : void CThreadInterrupt::reset() 14 : { 15 999 : flag.store(false, std::memory_order_release); 16 999 : } 17 : 18 1865 : void CThreadInterrupt::operator()() 19 : { 20 1865 : { 21 1865 : std::unique_lock<std::mutex> lock(mut); 22 1865 : flag.store(true, std::memory_order_release); 23 : } 24 1865 : cond.notify_all(); 25 1865 : } 26 : 27 138045 : bool CThreadInterrupt::sleep_for(std::chrono::milliseconds rel_time) 28 : { 29 138045 : std::unique_lock<std::mutex> lock(mut); 30 552180 : return !cond.wait_for(lock, rel_time, [this]() { return flag.load(std::memory_order_acquire); }); 31 : } 32 : 33 5305 : bool CThreadInterrupt::sleep_for(std::chrono::seconds rel_time) 34 : { 35 5305 : return sleep_for(std::chrono::duration_cast<std::chrono::milliseconds>(rel_time)); 36 : } 37 : 38 0 : bool CThreadInterrupt::sleep_for(std::chrono::minutes rel_time) 39 : { 40 0 : return sleep_for(std::chrono::duration_cast<std::chrono::milliseconds>(rel_time)); 41 : }