00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef __PION_PROCESS_HEADER__
00011 #define __PION_PROCESS_HEADER__
00012
00013 #include <string>
00014 #include <boost/noncopyable.hpp>
00015 #include <boost/thread/once.hpp>
00016 #include <boost/thread/mutex.hpp>
00017 #include <boost/thread/condition.hpp>
00018 #include <pion/config.hpp>
00019
00020
00021 namespace pion {
00022
00026 class PION_API process :
00027 private boost::noncopyable
00028 {
00029 public:
00030
00031
00032 ~process() {}
00033
00035 process(void) {}
00036
00038 static void shutdown(void);
00039
00041 static void wait_for_shutdown(void);
00042
00044 static void initialize(void);
00045
00047 static void daemonize(void);
00048
00049
00050 protected:
00051
00053 struct config_type {
00055 config_type() : shutdown_now(false) {}
00056
00058 bool shutdown_now;
00059
00061 boost::condition shutdown_cond;
00062
00064 boost::mutex shutdown_mutex;
00065 };
00066
00067
00069 static inline config_type& get_config(void) {
00070 boost::call_once(process::create_config, m_instance_flag);
00071 return *m_config_ptr;
00072 }
00073
00074
00075 private:
00076
00078 static void create_config(void);
00079
00080
00082 static boost::once_flag m_instance_flag;
00083
00085 static config_type * m_config_ptr;
00086 };
00087
00088
00089 }
00090
00091 #endif