我有一个应用程序需要以下列方式响应某些事件:
void someMethodWithinSomeClass() {
while (true) {
wait for event;
if (event == SomeEvent) {
doSomething();
continue;
}
if (event == SomeOtherEvent) {
doSomethingElse();
continue;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将是一些线程运行.在其他一些线程中,操作会创建并触发事件.
如何让这些事件达到上述方法/类?在C++中实现事件处理的正确策略或体系结构是什么?
我有线程1执行以下代码:
unique_lock<mutex> ul(m);
while(condition == true)
cv.wait(ul);
Run Code Online (Sandbox Code Playgroud)
并且线程2执行此代码:
condition = false;
cv.notify_one();
Run Code Online (Sandbox Code Playgroud)
不幸的是我遇到了时间问题:
T1: condition checks true
T2: condition set to false
T2: cv.notify_one()
T1: cv.wait()
Run Code Online (Sandbox Code Playgroud)
线程1完全错过了通知,并在wait()时保持阻塞状态.我尝试使用wait()版本,它接受一个谓词,但结果基本相同.也就是说,谓词的主体执行检查,但在它返回之前,条件的值被改变并且发送通知.然后谓词返回.
我怎样才能解决这个问题?