00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 #include <opc/common/class_pointers.h> 00012 #include <mutex> 00013 #include <condition_variable> 00014 00015 namespace OpcUa 00016 { 00017 00018 class Daemon 00019 { 00020 public: 00021 DEFINE_CLASS_POINTERS(Daemon); 00022 00023 public: 00024 Daemon(); 00025 ~Daemon(); 00026 00027 void Daemonize(const std::string& str); 00028 void WaitForTerminate(); 00029 00030 void Terminate(); 00031 00032 private: 00033 void SetTerminateHandlers(); 00034 00035 private: 00036 std::mutex Mutex; 00037 std::condition_variable ExitEvent; 00038 volatile bool Terminating = false; 00039 }; 00040 00041 } // namespace OpcUa 00042