plebble
bgtask.h
Go to the documentation of this file.
1 /*
2 -------------------------------------------------------------------------------
3  PLEBBLE
4 -------------------------------------------------------------------------------
5  Copyright (C) 2019-2020 KATLAS Technology. (http://katlastechnology.com)
6  Copyright (C) 2017-2020 Marcos Mayorga. (mm@mm-studios.com)
7 
8  This file is part of our Plebble(R) Platform.
9 
10  The code below cannot be copied, used for any purpose other than the one
11  agreed and/or distributed without the express permission of
12  KATLAS Technology.
13 -------------------------------------------------------------------------------
14 
15 
16 */
17 #ifndef USGOV_d9c2e31514229da73677728a36467d5093f9d8c21db0e4518775212f42272f6b
18 #define USGOV_d9c2e31514229da73677728a36467d5093f9d8c21db0e4518775212f42272f6b
19 
20 #include <thread>
21 #include <atomic>
22 #include <condition_variable>
23 #include <mutex>
24 #include <functional>
25 #include <us/gov/config.h>
26 
27 namespace us{ namespace gov {
28 
29  using namespace std;
30 
31  struct bgtask {
32  bgtask();
33  bgtask(function<void ()> run, function<void ()> onwakeup);
34  virtual ~bgtask();
35 
36  static const char* KO_81021;
37 
38  void set_run_function(function<void ()> r);
39  virtual ko start();
40  virtual ko wait_ready(const chrono::system_clock::time_point& deadline) const;
41  virtual void stop();
42  virtual void join();
43  void wakeup();
44  bool isup() const { return resume.load()!=2; }
45  bool isdown() const { return resume.load()==2; }
46  //bool is_ready() const { return ready; }
47  bool resumed() const { return resume.load()>0; }
48  void run_();
49  void reset() { resume.store(0); }
50  bool reset_wait();
51  bool reset_resume();
52  inline bool is_active() const { return active; }
53 
54  protected:
55  atomic<short> resume{0};
56  thread* th{nullptr};
57  bool active{false};
58 
59  function<void ()> run;
60  function<void ()> onwakeup;
61 
62  mutable mutex mx_ready;
63  bool ready{false};
64  mutable condition_variable cv_ready;
65  };
66 
67  struct wbgtask: bgtask {
68  typedef bgtask b;
69  wbgtask(function<void ()> onwakeup);
70  virtual ~wbgtask();
71 
72  virtual void collect()=0;
73  virtual void task_init() {};
74  virtual void task()=0;
75  virtual void task_cleanup() {};
76 
77  private:
78  void collect_();
79  void run();
80  };
81 
82 
83 }}
84 
85 #endif
86 
87 
88 
us::gov::bgtask::onwakeup
function< void()> onwakeup
Definition: bgtask.h:60
us::gov::bgtask::reset_resume
bool reset_resume()
us::gov::bgtask::~bgtask
virtual ~bgtask()
bgtask.h
us::gov::wbgtask::task_init
virtual void task_init()
Definition: bgtask.h:73
us.ko
Definition: ko.java:20
us::gov::bgtask::reset_wait
bool reset_wait()
us
Definition: daemon.h:22
us::gov::bgtask::run
function< void()> run
Definition: bgtask.h:59
us::gov::bgtask::resumed
bool resumed() const
Definition: bgtask.h:47
us::gov::bgtask::wakeup
void wakeup()
us::gov::wbgtask::collect
virtual void collect()=0
us::gov::wbgtask::task_cleanup
virtual void task_cleanup()
Definition: bgtask.h:75
us::gov::bgtask::stop
virtual void stop()
us::gov::bgtask::mx_ready
mutex mx_ready
Definition: bgtask.h:62
us::gov::wbgtask
Definition: bgtask.h:67
us::gov::wbgtask::collect_
void collect_()
us::gov::wbgtask::~wbgtask
virtual ~wbgtask()
us::gov::wbgtask::run
void run()
us::gov::bgtask::start
virtual ko start()
us::gov::bgtask::reset
void reset()
Definition: bgtask.h:49
us::gov::wbgtask::wbgtask
wbgtask(function< void()> onwakeup)
us::gov::bgtask::set_run_function
void set_run_function(function< void()> r)
us::gov
Definition: daemon.h:22
us::gov::bgtask::run_
void run_()
us::ko
const ko_t * ko
Definition: ko.h:27
us::gov::bgtask::KO_81021
static const char * KO_81021
Definition: bgtask.h:36
us::gov::bgtask::join
virtual void join()
us::gov::bgtask::cv_ready
condition_variable cv_ready
Definition: bgtask.h:64
us::gov::wbgtask::task
virtual void task()=0
us::ok
static constexpr ko ok
Definition: ko.h:28
c
us::gov::bgtask c
Definition: bgtask.cpp:24
us::gov::bgtask::is_active
bool is_active() const
Definition: bgtask.h:52
std
Definition: app.h:380
us::gov::bgtask::isup
bool isup() const
Definition: bgtask.h:44
us::gov::bgtask::bgtask
bgtask()
config.h
us::gov::bgtask::isdown
bool isdown() const
Definition: bgtask.h:45
us::gov::bgtask::wait_ready
virtual ko wait_ready(const chrono::system_clock::time_point &deadline) const
gov.h
log
#define log
Definition: gov.h:83
us::gov::bgtask::bgtask
bgtask(function< void()> run, function< void()> onwakeup)
us::gov::wbgtask::b
bgtask b
Definition: bgtask.h:68
us::gov::bgtask
Definition: bgtask.h:31