LCOV - code coverage report
Current view: top level - src - threadinterrupt.h (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 1 1 100.0 %
Date: 2020-09-26 01:30:44 Functions: 2 2 100.0 %

          Line data    Source code
       1             : // Copyright (c) 2016-2019 The Bitcoin Core developers
       2             : // Distributed under the MIT software license, see the accompanying
       3             : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
       4             : 
       5             : #ifndef BITCOIN_THREADINTERRUPT_H
       6             : #define BITCOIN_THREADINTERRUPT_H
       7             : 
       8             : #include <sync.h>
       9             : 
      10             : #include <atomic>
      11             : #include <chrono>
      12             : #include <condition_variable>
      13             : 
      14             : /*
      15             :     A helper class for interruptible sleeps. Calling operator() will interrupt
      16             :     any current sleep, and after that point operator bool() will return true
      17             :     until reset.
      18             : */
      19        2530 : class CThreadInterrupt
      20             : {
      21             : public:
      22             :     CThreadInterrupt();
      23             :     explicit operator bool() const;
      24             :     void operator()();
      25             :     void reset();
      26             :     bool sleep_for(std::chrono::milliseconds rel_time);
      27             :     bool sleep_for(std::chrono::seconds rel_time);
      28             :     bool sleep_for(std::chrono::minutes rel_time);
      29             : 
      30             : private:
      31             :     std::condition_variable cond;
      32             :     Mutex mut;
      33             :     std::atomic<bool> flag;
      34             : };
      35             : 
      36             : #endif //BITCOIN_THREADINTERRUPT_H

Generated by: LCOV version 1.15