2010-10-14 75 views

回答

4

可能有,或者您可能需要稍微更高級別。 QFutureQFutureWatcher類被設計爲當它正在觀看的項目完成時與Qt的Concurrent frameworkQFutureWatcherhas a signal一起使用。

+0

你能詳細說一下嗎?我應該如何將QRunnable與QFuture關聯?或者你是否建議不要使用QRunnable? – 2012-11-12 09:58:26

3

您可以添加自己的SIGNAL,它將作爲run()方法所做的最後一件事發出。然後只需將它連接到核心響應SLOT就在調用connect(...);

+1

請注意,您需要從QRunnable和QObject中繼承您的類才能完成此操作。 – 2013-06-10 07:36:19

+0

是的,你是完全正確的。 – Losiowaty 2013-06-10 13:08:56

+0

您也可以使用QMetaObject :: invokeMethod()直接調用槽。如果你使用Qt :: QueuedConnection,你可以安全地在另一個線程的上下文中調用槽。 – sashoalm 2016-02-05 09:30:52

3

您可以簡單地使用QtConcurrent運行runnable並使用QFuture等待完成。

#include <QtConcurrentRun> 

class MyRunnable : public Runnable{ 
    void run(); 
} 

才能運行並等待它,你可以做以下

//create a new MyRunnable to use 
MyRunnable instance; 

//run the instance asynchronously 
QFuture<void> future = QtConcurrent::run(&instance, &MyRunnable::run); 

//wait for the instance completion 
future.waitForFinished(); 

Qtconcurrent ::運行將啓動一個新的線程來實例上執行方法的run(),並立即返回一個QFuture那跟蹤實例進度。

但請注意,使用此解決方案時,您可以在執行過程中將實例保存在內存中。

+0

我認爲QtConcurrent :: run實際上並沒有使用QRunnable ...在你的例子中,你從Runnable類(QRunnable?)派生出來 - 但是我認爲它不會從任何類派生出來? – 2013-09-20 13:52:21

+0

事實上,我只是想盡可能地保持這個例子儘可能接近請求。你當然是對的:myRunnable可能是任何類。 – Pierluigi 2013-09-20 20:09:51

相關問題