#pragma once
#include <mutex>
#include <condition_variable>
#include <chrono>
class CEvtVar {
std::mutex m_mtex;
bool m_flag;
std::condition_variable m_condvar;
public:
CEvtVar();
~CEvtVar();
int wait(int ms);
void notify();
};
#include "CEvtVar.h"
CEvtVar::CEvtVar() {
}
CEvtVar::~CEvtVar() {
}
int CEvtVar::wait(int Nms) {
bool status = false;
std::unique_lock<std::mutex> mlocker(m_mtex);
m_flag = false;
if (Nms <= 0) {
m_condvar.wait(mlocker, [&]() {return m_flag; });
return 1;
}
else {
status = m_condvar.wait_for(mlocker,std::chrono::milliseconds(Nms), [&]() {return m_flag; });
if (status) {
m_flag = false;
return 1;
}
else {
//time out
return -1;
}
}
return -1;
}
void CEvtVar::notify() {
{
std::lock_guard<std::mutex> mlocker(m_mtex);
m_flag = true;
}
m_condvar.notify_all();
}