2014-10-20 33 views
1

Qt是否提供了一個同步原語,其行爲與Microsoft的併發運行時的Concurrency::event的行爲幾乎相同?QWaitCondition,除了手動重置? (或者在Qt併發之外創建QFuture對象?)

具體來說,我希望線程A中的wait()函數返回,即使在線程B已經調用wakeAll()之後,但在調用「reset」函數之前它不調用wait()。另外,我希望reset()和set()不必從同一個線程中調用。基本上,如果我不需要在特定線程中運行異步操作(在我的情況下,它基本上將任務提供給OpenGL渲染線程),QFuture和Qt Concurrent將是完美的。

如果沒有特別提供,是否有一種方法來模仿Qt的功能?

謝謝!

回答

0

我以爲我在過去也需要QFuture幾次,但總是使用信號和插槽在線程之間傳遞消息,攜帶我將放在QFuture中的數據作爲參數。特別是當我的線程底部有一個QEventLoop時。

沒有事件循環,我通常最終會用QWaitCondition,QMutex和QMutexLocker手動完成它。

很遺憾,我會說沒有任何更適合你所描述的高級班。

0

所以現在你有互斥和等待條件。

只需添加一個布爾標誌,您可以使用鎖定的相同互斥鎖訪問該標誌。

當你做wakeAll,也設置標誌爲真。在做wait之前,先檢查一下標誌,不要等待它爲真。然後重置只是將標誌設置爲false。