相关疑难解决方法(0)

在C++中进行事件处理的正确方法是什么?

我有一个应用程序需要以下列方式响应某些事件:

void someMethodWithinSomeClass() {
    while (true) {
        wait for event;
        if (event == SomeEvent) {
            doSomething();
            continue;
        }
        if (event == SomeOtherEvent) {
            doSomethingElse();
            continue;
        }
    } 
}
Run Code Online (Sandbox Code Playgroud)

这将是一些线程运行.在其他一些线程中,操作会创建并触发事件.

如何让这些事件达到上述方法/类?在C++中实现事件处理的正确策略或体系结构是什么?

c++ events multithreading event-handling

22
推荐指数
4
解决办法
5万
查看次数

C++ 11我可以确保condition_variable.wait()不会错过通知吗?

我有线程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()版本,它接受一个谓词,但结果基本相同.也就是说,谓词的主体执行检查,但在它返回之前,条件的值被改变并且发送通知.然后谓词返回.

我怎样才能解决这个问题?

c++ multithreading condition-variable c++11

6
推荐指数
1
解决办法
1634
查看次数