condvar.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 129 行
CPP
129 行
//////////////////////////////////////////////////////////////////////// // CondVar.cpp // // by Reiot// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// include files//////////////////////////////////////////////////#include "CondVar.h"#include "Thread.h"#include "LogClient.h"#include "StringStream.h"////////////////////////////////////////////////////////////////////////// constructor////////////////////////////////////////////////////////////////////////CondVar::CondVar ( CondVarAttr * attr ) throw ( Error )//: m_Cond(PTHREAD_COND_INITIALIZER){ __BEGIN_TRY pthreadAPI::pthread_cond_init_ex( &m_Cond , ( attr == NULL ? NULL : attr->getAttr() ) ); log(LOG_DEBUG_MSG, "", "", "CondVar object constructed"); __END_CATCH} ////////////////////////////////////////////////////////////////////////// destructor////////////////////////////////////////////////////////////////////////CondVar::~CondVar () throw ( CondVarException , Error ){ __BEGIN_TRY pthreadAPI::pthread_cond_destroy_ex( &m_Cond ); log(LOG_DEBUG_MSG, "", "", "CondVar object destructed"); __END_CATCH} ////////////////////////////////////////////////////////////////////////// wake up a waiting thread////////////////////////////////////////////////////////////////////////void CondVar::signal () throw ( Error ){ __BEGIN_TRY StringStream msg; msg << "Thread[" << Thread::self() << "] signal conditional varible."; log(LOG_DEBUG_MSG, "", "", msg.toString()); pthreadAPI::pthread_cond_signal_ex( &m_Cond ); __END_CATCH} ////////////////////////////////////////////////////////////////////////// waiting until somebody wake up me////////////////////////////////////////////////////////////////////////void CondVar::wait ( Mutex & mutex ) throw ( Error ){ __BEGIN_TRY StringStream msg; msg << "Thread[" << Thread::self() << "] waiting signal."; log(LOG_DEBUG_MSG, "", "", msg.toString()); pthreadAPI::pthread_cond_wait_ex( &m_Cond , mutex.getMutex() ); __END_CATCH} ////////////////////////////////////////////////////////////////////////// waiting until somebody wake up me or specified time elapsed////////////////////////////////////////////////////////////////////////void CondVar::timedwait ( Mutex & mutex , const struct timespec * timeout ) throw ( CondVarException , InterruptedException , Error ){ __BEGIN_TRY StringStream msg1; StringStream msg2; msg1 << "Thread[" << Thread::self() << "] release lock (atomically)."; msg2 << "Thread[" << Thread::self() << "] gain lock (atomically)."; log(LOG_DEBUG_MSG, "", "", msg1.toString()); pthreadAPI::pthread_cond_timedwait_ex( &m_Cond , mutex.getMutex() , timeout ); log(LOG_DEBUG_MSG, "", "", msg2.toString()); __END_CATCH} ////////////////////////////////////////////////////////////////////////// wake up all waiting threads////////////////////////////////////////////////////////////////////////void CondVar::broadcast () throw ( Error ){ __BEGIN_TRY pthreadAPI::pthread_cond_broadcast_ex( &m_Cond ); __END_CATCH}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?