#ifndef _THREAD_MONITOR_HPP_ #define _THREAD_MONITOR_HPP_ #ifndef _THREAD_MUTEX_HPP_ #include #endif template class Monitor { public: Monitor(void); virtual ~Monitor(); void enter(void); void leave(void); T *operator->(void); operator T*(void); Monitor &operator=(T *pObj); private: T *mlpObj; Mutex mMutex; }; template inline Monitor::Monitor(void) : mlpObj(0) { } template inline Monitor::~Monitor() { } template inline T *Monitor::operator->(void) { return mlpObj; } template inline Monitor::operator T*(void) { return mlpObj; } template inline Monitor &Monitor::operator=(T *pObj) { mlpObj=pObj; return *this; } template inline void Monitor::enter(void) { mMutex.requestMutex(); } template inline void Monitor::leave(void) { mMutex.releaseMutex(); } #endif