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的外观也有完全的自由。我需要实现的只是将文件传递给线程的模型,并等待客户端线程在未来完成。我将这一承诺作为实现它的一种方式,并且可以根据需要进行更改。 –