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語句中,表示該語句結束時完成賦值操作,結果與語句順序無關,並行關係 可以這樣理解 阻塞...