c++ - 是否可以在没有 QtConcurrent 的情况下使用 QFuture?

标签 c++ multithreading qt qthread qfuture

我有一个带有QThread的程序,其中包含一个网络客户端。客户端应该获取一个对象,处理它,将其上传到服务器,获取响应,并向主线程报告。我用 std::promise 做到了这一点,并使用了它的 future。我使 std::promise 成为在获取其 future 后发出的对象的成员。

最小示例代码如下:

我发出的对象:

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 执行此操作?

最佳答案

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

https://github.com/benlau/asyncfuture

它有一个清晰的示例,可以像 Promise 对象一样使用 QFuture。

关于c++ - 是否可以在没有 QtConcurrent 的情况下使用 QFuture?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43087176/

相关文章:

c++ - 轻松处理声音文件

c++ - 为什么允许 C++ 类具有零数据成员?

c++ - 动态引用头变量c++

multithreading - x86 CPU 有多少条内存屏障指令?

java - 如何在特定时间后继续运行线程

c++ - 当完整对象被替换时,基类子对象的"Transparent replacement"?

.net - 在 .NET 中使用线程本地存储的最佳实践是什么?

c++ - "Undefined reference to"- C++/Qt 中的错误/静态成员变量

qt - 为 Symbian 编译多平台 Qt 应用程序

c++ - Qt 使用 QRegularExpression 多行选项