没有QtConcurrent可以使用QFuture吗?

时间:2017-03-29 07:33:40

标签: c++ multithreading qt qthread qfuture

我有一个QThread的程序,其中包含一个网络客户端。客户端应该接受一个对象,处理它,将其上传到服务器,获取响应,并向主线程报告。我使用std::promise执行此操作,并使用其future。我将std::promise作为未来之后发出的对象的成员。

最小的示例代码如下:

我正在发射的物体:

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正确地做到这一点有什么选择?

1 个答案:

答案 0 :(得分:1)

是的,您可以在没有QConcurrent的情况下使用QFuture。但API没有记录。您可以在我的包装库AsyncFuture上查看:

https://github.com/benlau/asyncfuture

它有一个明确的例子,就像使用承诺对象一样使用QFuture。