2019-08-19 19:19:58 +08:00
|
|
|
|
#ifndef HGL_MULTI_THREAD_CONDITION_VARIABLE_INCLUDE
|
|
|
|
|
#define HGL_MULTI_THREAD_CONDITION_VARIABLE_INCLUDE
|
|
|
|
|
|
|
|
|
|
#include<hgl/platform/Platform.h>
|
|
|
|
|
namespace hgl
|
|
|
|
|
{
|
|
|
|
|
class ThreadMutex;
|
|
|
|
|
class RWLock;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 条件变量
|
|
|
|
|
*/
|
|
|
|
|
class CondVar
|
|
|
|
|
{
|
2020-01-23 20:37:42 +08:00
|
|
|
|
cond_var_ptr *cond_var;
|
2019-08-19 19:19:58 +08:00
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
CondVar();
|
|
|
|
|
virtual ~CondVar();
|
|
|
|
|
|
|
|
|
|
bool Wait(ThreadMutex *,double time=0); ///<释放指定ThreadMutex,在条件符合后重新锁定并结束等待,0表示永久
|
|
|
|
|
|
|
|
|
|
#if HGL_OS == HGL_OS_Windows
|
|
|
|
|
bool Wait(RWLock *,double time=0,bool read=false); ///<释放指定RWLock,在条件符合后重新锁定并结束等待。(注:此函数仅在Windows 2008/Vista及更新版本中支持,Linux/BSD版不支持)
|
|
|
|
|
#endif//HGL_OS == HGL_OS_Windows
|
|
|
|
|
|
|
|
|
|
void Signal(); ///<发送一个信号,让一个等待的线程解锁
|
|
|
|
|
void Broadcast(); ///<广播一个信号,让所有等待的线程都解锁
|
|
|
|
|
};//class CondVar
|
|
|
|
|
}//namespace hgl
|
|
|
|
|
#endif//HGL_MULTI_THREAD_CONDITION_VARIABLE_INCLUDE
|