Fabcoin Core  0.16.2
P2P Digital Currency
threadinterrupt.cpp
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2017 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 CThreadInterrupt::operator bool() const
9 {
10  return flag.load(std::memory_order_acquire);
11 }
12 
14 {
15  flag.store(false, std::memory_order_release);
16 }
17 
19 {
20  {
21  std::unique_lock<std::mutex> lock(mut);
22  flag.store(true, std::memory_order_release);
23  }
24  cond.notify_all();
25 }
26 
27 bool CThreadInterrupt::sleep_for(std::chrono::milliseconds rel_time)
28 {
29  std::unique_lock<std::mutex> lock(mut);
30  return !cond.wait_for(lock, rel_time, [this]() { return flag.load(std::memory_order_acquire); });
31 }
32 
33 bool CThreadInterrupt::sleep_for(std::chrono::seconds rel_time)
34 {
35  return sleep_for(std::chrono::duration_cast<std::chrono::milliseconds>(rel_time));
36 }
37 
38 bool CThreadInterrupt::sleep_for(std::chrono::minutes rel_time)
39 {
40  return sleep_for(std::chrono::duration_cast<std::chrono::milliseconds>(rel_time));
41 }
bool sleep_for(std::chrono::milliseconds rel_time)
std::condition_variable cond
std::atomic< bool > flag