#ifndef __CUVCOND__H_
#define __CUVCOND__H_
#include "UvMutex.h"
class CUvCond
{
public:
CUvCond();
~CUvCond();
public:
void Signal();
void BroadCast();
void Wait();
int TimedWait(uint64_t iTimeOut);
private:
CUvMutex mcMutex;
uv_cond_t mstCond;
};
#endif
#include "UvCond.h"
CUvCond::CUvCond(){
uv_cond_init(&mstCond);
}
CUvCond::~CUvCond(){
uv_cond_destroy(&mstCond);
}
void CUvCond::Signal() {
mcMutex.Lock();
uv_cond_signal(&mstCond);
mcMutex.UnLock();
}
void CUvCond::BroadCast() {
uv_cond_broadcast(&mstCond);
}
void CUvCond::Wait() {
mcMutex.Lock();
uv_cond_wait(&mstCond, mcMutex.GetMutex());
mcMutex.UnLock();
}
int CUvCond::TimedWait(uint64_t iTimeOut) {
int iRet = 0;
mcMutex.Lock();
iRet = uv_cond_timedwait(&mstCond, mcMutex.GetMutex(), iTimeOut);
mcMutex.UnLock();
return iRet;
}