QT QFuture的非阻塞呼叫

2021-10-06 16:13:33 字數 759 閱讀 2321

c++11中引入了future/promise, 但是目前我使用的編譯器並未完全支援c++11。查了一下,發現qt提供了future類。

int main(int argc, char *ar**)

非阻塞呼叫,要配合qfuturewatcher, 把它和乙個future相關聯,他能在呼叫完成之後,發出qfuturewatcher::finished訊號。 這樣主線程就能去做其他事情,不用阻塞在等待future完成的那一步。

這裡用乙個讀取的**來舉例子,因為讀取可能耗時比較長,所以放到其他執行緒裡面完成。

這是乙個非常適合的使用future的場景。

class imagereader : public qobject ;

qfutureimagereader::read(const qstring &filename)

; return qtconcurrent::run(readimageworker, filename);

}//....

// 使用**

imagereader reader;

qfuture future = reader.read(輸入引數);

qfuturewatcher *watcher = new qfuturewatcher();

connect(watcher, &qfuturewatcher::finished,

[=]() );

watcher->setfuture(future);

阻塞和非阻塞系統呼叫

阻塞 阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起。函式只有在得到結果之後才會返回。有人也許會把阻塞呼叫和同步呼叫等同起來,實際上他是不同的。對於同步呼叫來說,很多時候當前執行緒還是啟用的,只是從邏輯上當前函式沒有返回而已。例如,我們在csocket中呼叫receive函式,如果緩衝區中沒有資料...

阻塞 非阻塞

阻塞和非阻塞指 的是在接收和傳送時是否等待動作完成才返回 舉例 阻塞 block 是指,你撥通某人 的 但是此人不在,於是你拿著 等他回來,其間不能再用 非阻塞 nonblock 是指,你撥通某人 的 但是此人不在,於是你結束通話 待會兒再打。至於到時候他回來沒有,只有打了 才知道。即所謂的 輪詢 ...

阻塞非阻塞

阻塞和非阻塞 阻塞 可用在assign語句和always語句中,表示只要源訊號發生變化,目標訊號就立刻完成賦值操作,在always塊中,結果與語句順序有關,在always塊中是順序關係 非阻塞 只能用在always語句中,表示該語句結束時完成賦值操作,結果與語句順序無關,並行關係 可以這樣理解 阻塞...