C++ 是否可以在不使用QT的情况下使用QFuture?

C++ 是否可以在不使用QT的情况下使用QFuture?,c++,multithreading,qt,qthread,qfuture,C++,Multithreading,Qt,Qthread,Qfuture,我有一个带有QThread的程序,其中包含一个网络客户端。客户机应该获取一个对象,对其进行处理,将其上传到服务器,获取响应,并向主线程报告。我使用了std::promise,并使用了它的未来。我使std::promise成为对象的一个成员,该对象在获取了它的未来后发出 最低限度的示例代码如下所示: 我正在发射的对象: struct FileToUpload { std::string fileData; std::string filename; std::promise

我有一个带有
QThread
的程序,其中包含一个网络客户端。客户机应该获取一个对象,对其进行处理,将其上传到服务器,获取响应,并向主线程报告。我使用了
std::promise
,并使用了它的
未来
。我使
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();
有没有同样的方法?


我只找到了一个可与QtConcurrent一起使用的
QFuture
类。我找不到一个例子来解释如何在
QThread
中使用它。使用Qt正确执行此操作的选项有哪些?

是的,您可以在不使用QConcurrent的情况下使用QFuture。但是API没有文档记录。您可以查看我的包装器库AsyncFuture,网址为:


它有一个明确的例子,可以像promise对象一样使用QFuture。

您需要转到
QFuture
?另外,
FileToUpload
结构是否在您的控制之下?即,您可以修改其定义吗?@G.M.实际上,无论是否必须移动未来,我都有完全的自由(尽管我不希望复制它……它最终是一个大小只有几MB的文件;还有“Qt元类型”在不可复制的东西上有问题,所以我通过传递指针来避免麻烦)。我对
FileToUpload
的外观也有充分的自由。我需要实现的只是一个模型,在这个模型中,我将文件传递给线程,并等待客户端线程在将来完成。我创造了这个承诺作为实现它的一种方式,它可以根据需要改变。