📄 os.hpp
字号:
{ create(pool, type, name); } // // Destructor. // ~Pj_Mutex() { destroy(); } // // Create mutex. // pj_status_t create( Pj_Pool *pool, Type type, const char *name = NULL) { destroy(); return pj_mutex_create( pool->pool_(), name, type, &mutex_ ); } // // Create simple mutex. // pj_status_t create_simple( Pj_Pool *pool,const char *name = NULL) { return create(pool, SIMPLE, name); } // // Create recursive mutex. // pj_status_t create_recursive( Pj_Pool *pool, const char *name = NULL ) { return create(pool, RECURSE, name); } // // Get pjlib compatible mutex object. // pj_mutex_t *pj_mutex_t_() { return mutex_; } // // Destroy mutex. // void destroy() { if (mutex_) { pj_mutex_destroy(mutex_); mutex_ = NULL; } } // // Lock mutex. // pj_status_t acquire() { return pj_mutex_lock(mutex_); } // // Unlock mutex. // pj_status_t release() { return pj_mutex_unlock(mutex_); } // // Try locking the mutex. // pj_status_t tryacquire() { return pj_mutex_trylock(mutex_); }private: pj_mutex_t *mutex_;};//// Semaphore//class Pj_Semaphore : public Pj_Object{public: // // Construct semaphore // Pj_Semaphore(Pj_Pool *pool, unsigned max, unsigned initial = 0, const char *name = NULL) : sem_(NULL) { create(pool, max, initial, name); } // // Destructor. // ~Pj_Semaphore() { destroy(); } // // Create semaphore // pj_status_t create( Pj_Pool *pool, unsigned max, unsigned initial = 0, const char *name = NULL ) { destroy(); return pj_sem_create( pool->pool_(), name, initial, max, &sem_); } // // Destroy semaphore. // void destroy() { if (sem_) { pj_sem_destroy(sem_); sem_ = NULL; } } // // Get pjlib compatible semaphore object. // pj_sem_t *pj_sem_t_() { return (pj_sem_t*)this; } // // Wait semaphore. // pj_status_t wait() { return pj_sem_wait(this->pj_sem_t_()); } // // Wait semaphore. // pj_status_t acquire() { return wait(); } // // Try wait semaphore. // pj_status_t trywait() { return pj_sem_trywait(this->pj_sem_t_()); } // // Try wait semaphore. // pj_status_t tryacquire() { return trywait(); } // // Post semaphore. // pj_status_t post() { return pj_sem_post(this->pj_sem_t_()); } // // Post semaphore. // pj_status_t release() { return post(); }private: pj_sem_t *sem_;};//// Event object.//class Pj_Event{public: // // Construct event object. // Pj_Event( Pj_Pool *pool, bool manual_reset = false, bool initial = false, const char *name = NULL ) : event_(NULL) { create(pool, manual_reset, initial, name); } // // Destructor. // ~Pj_Event() { destroy(); } // // Create event object. // pj_status_t create( Pj_Pool *pool, bool manual_reset = false, bool initial = false, const char *name = NULL) { destroy(); return pj_event_create(pool->pool_(), name, manual_reset, initial, &event_); } // // Get pjlib compatible event object. // pj_event_t *pj_event_t_() { return event_; } // // Destroy event object. // void destroy() { if (event_) { pj_event_destroy(event_); event_ = NULL; } } // // Wait. // pj_status_t wait() { return pj_event_wait(event_); } // // Try wait. // pj_status_t trywait() { return pj_event_trywait(event_); } // // Set event state to signalled. // pj_status_t set() { return pj_event_set(this->pj_event_t_()); } // // Release one waiting thread. // pj_status_t pulse() { return pj_event_pulse(this->pj_event_t_()); } // // Set a non-signalled. // pj_status_t reset() { return pj_event_reset(this->pj_event_t_()); }private: pj_event_t *event_;};//// Timestamp//class Pj_Timestamp{public: pj_status_t get_timestamp() { return pj_get_timestamp(&ts_); } Pj_Timestamp& operator += (const Pj_Timestamp &rhs) { pj_add_timestamp(&ts_, &rhs.ts_); return *this; } Pj_Timestamp& operator -= (const Pj_Timestamp &rhs) { pj_sub_timestamp(&ts_, &rhs.ts_); return *this; } Pj_Time_Val to_time() const { Pj_Timestamp zero; pj_memset(&zero, 0, sizeof(zero)); return Pj_Time_Val(pj_elapsed_time(&zero.ts_, &ts_)); } pj_uint32_t to_msec() const { Pj_Timestamp zero; pj_memset(&zero, 0, sizeof(zero)); return pj_elapsed_msec(&zero.ts_, &ts_); } pj_uint32_t to_usec() const { Pj_Timestamp zero; pj_memset(&zero, 0, sizeof(zero)); return pj_elapsed_usec(&zero.ts_, &ts_); } pj_uint32_t to_nanosec() const { Pj_Timestamp zero; pj_memset(&zero, 0, sizeof(zero)); return pj_elapsed_nanosec(&zero.ts_, &ts_); } pj_uint32_t to_cycle() const { Pj_Timestamp zero; pj_memset(&zero, 0, sizeof(zero)); return pj_elapsed_cycle(&zero.ts_, &ts_); }private: pj_timestamp ts_;};//// OS abstraction.//class Pj_OS_API{public: // // Get current time. // static pj_status_t gettimeofday( Pj_Time_Val *tv ) { return pj_gettimeofday(tv); } // // Parse to time of day. // static pj_status_t time_decode( const Pj_Time_Val *tv, pj_parsed_time *pt ) { return pj_time_decode(tv, pt); } // // Parse from time of day. // static pj_status_t time_encode( const pj_parsed_time *pt, Pj_Time_Val *tv) { return pj_time_encode(pt, tv); } // // Convert to GMT. // static pj_status_t time_local_to_gmt( Pj_Time_Val *tv ) { return pj_time_local_to_gmt( tv ); } // // Convert time to local. // static pj_status_t time_gmt_to_local( Pj_Time_Val *tv) { return pj_time_gmt_to_local( tv ); }};//// Timeval inlines.//inline pj_status_t Pj_Time_Val::gettimeofday(){ return Pj_OS_API::gettimeofday(this);}inline pj_parsed_time Pj_Time_Val::decode(){ pj_parsed_time pt; Pj_OS_API::time_decode(this, &pt); return pt;}inline pj_status_t Pj_Time_Val::encode(const pj_parsed_time *pt){ return Pj_OS_API::time_encode(pt, this);}inline pj_status_t Pj_Time_Val::to_gmt(){ return Pj_OS_API::time_local_to_gmt(this);}inline pj_status_t Pj_Time_Val::to_local(){ return Pj_OS_API::time_gmt_to_local(this);}#endif /* __PJPP_OS_HPP__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -