0
我有一個程序QThread
,它包含一個網絡客戶端。客戶端應該接受一個對象,對其進行處理,將其上傳到服務器,獲取響應並回報主線程。我用std::promise
做了這個,並用它的future
。我做了std::promise
這個物體的一個成員,它已經把它的未來發射出去了。是否可以在沒有QtConcurrent的情況下使用QFuture?
的最小樣本代碼如下:
我發光的對象:
struct FileToUpload
{
std::string fileData;
std::string filename;
std::promise<int> promise;
}
的部分我使用用於發射:
FileToUpload theFile;
auto uploadFuture = theFile.promise.get_future();
emit uploadFile(&theFile); //passing pointer because promise is non-copyable
auto uploadSuccess = uploadFuture.get();
是否有一個Qt的方式做同樣的事情?
我只發現了一個可用於QtConcurrent的QFuture
類。我找不到一個解釋如何在QThread
中使用此示例的單個示例。我的選擇是否正確地使用Qt來做到這一點?
您是否需要轉移到QFuture?另外,在你控制下的FileToUpload結構是否可以修改它的定義? –
@ G.M。其實我有充分的自由,無論我是否需要移動未來(儘管我不想複製它......這是一個文件,最終只有幾MB的大小;「Qt元類型」也有一個問題,可複製的東西,所以我通過傳遞指針爲自己節省了麻煩)。我對FileToUpload的外觀也有完全的自由。我需要實現的只是將文件傳遞給線程的模型,並等待客戶端線程在未來完成。我將這一承諾作爲實現它的一種方式,並且可以根據需要進行更改。 –