QWaitCondition,手动重置除外? (或者在Qt Concurrent之外创建QFuture对象?)

时间:2014-10-20 19:22:35

标签: c++ multithreading qt

Qt是否提供了一个同步原语,其行为与Microsoft的并发运行时中的Concurrency::event大致相同?

具体来说,我希望线程A中的wait()返回,即使它不调用wait()直到线程B已经调用了wakeAll(),但是在" reset"之前。函数被调用。另外,我喜欢不必从同一个线程调用reset()和set()的东西。

基本上,如果我不需要在特定线程中运行异步操作(在我的情况下它基本上将任务提供给OpenGL渲染线程),QFuture和Qt Concurrent将是完美的。

如果没有特别提供,有没有办法用Qt模拟该功能?

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为我过去也需要几次QFuture,但总是最终使用信号和插槽在线程之间传递消息,携带我本来放在QFuture中的数据作为参数。特别是当我的帖子底部有一个QEventLoop时。

如果没有事件循环,我通常最终会使用QWaitCondition,QMutex和QMutexLocker手动完成。

很遗憾,我会说没有任何更高级别的课程符合你的描述。

答案 1 :(得分:0)

所以现在你有了互斥和等待条件。

只需添加一个布尔标志,您可以使用锁定的相同互斥锁访问该标志。

执行wakeAll时,也将flag设置为true。在做wait之前,先检查一下标志,不要等待它是真的。然后重置只是将标志设置为false。