Qt是否提供了一个同步原语,其行为与Microsoft的并发运行时中的Concurrency::event大致相同?
具体来说,我希望线程A中的wait()返回,即使它不调用wait()直到线程B已经调用了wakeAll(),但是在" reset"之前。函数被调用。另外,我喜欢不必从同一个线程调用reset()和set()的东西。
基本上,如果我不需要在特定线程中运行异步操作(在我的情况下它基本上将任务提供给OpenGL渲染线程),QFuture和Qt Concurrent将是完美的。
如果没有特别提供,有没有办法用Qt模拟该功能?
谢谢!
答案 0 :(得分:0)
我认为我过去也需要几次QFuture,但总是最终使用信号和插槽在线程之间传递消息,携带我本来放在QFuture中的数据作为参数。特别是当我的帖子底部有一个QEventLoop时。
如果没有事件循环,我通常最终会使用QWaitCondition,QMutex和QMutexLocker手动完成。
很遗憾,我会说没有任何更高级别的课程符合你的描述。
答案 1 :(得分:0)
所以现在你有了互斥和等待条件。
只需添加一个布尔标志,您可以使用锁定的相同互斥锁访问该标志。
执行wakeAll
时,也将flag设置为true。在做wait
之前,先检查一下标志,不要等待它是真的。然后重置只是将标志设置为false。