myW*_*SON 5 c++ qt multithreading boost
我看到Qt的未来类是直接模拟boost :: future但是对于boost :: promise来说qt是什么?
Bra*_*ite 10
如接受的答案所示构建我自己的QFuture对我不起作用.起初它似乎工作正常,但在我的测试中,我意识到它并没有阻止来电者.哎呦!所以我进一步挖掘了代码,发现QFutureInterface是你想要用作"承诺"的东西.像boost :: promise一样,QFutureInterface是你在工作线程中与之交互的东西,它是QFutures的工厂.
所以这就是我在Qt 4.8中所做的事情(不确定这是否适用于更高版本).
QFutureInterface<QVariant> promise;
promise.reportStarted();
...
promise.reportResult(someVariant);
promise.reportFinished();
Run Code Online (Sandbox Code Playgroud)
然后在客户端线程中,假设您可以访问QFutureInterface'promise'
QVariant result = promise.future().result();
Run Code Online (Sandbox Code Playgroud)
该future()调用是一种工厂方法,用于创建绑定到QFutureInterface的QFuture.你应该能够获得QFuture,result()如果你愿意,可以稍后再打电话给你.
boost::promises 是设定期货价值的手段。在 Qt 中,您无法设置 future,只能返回它们。这是未来“设置”数据的唯一方法。
因此,为了设置未来的数据,您必须从 调用的函数返回它QtConcurrent::run。为此,您可以使用 Qt 的任何机制在线程之间进行通信——事件、互斥保护变量等。您必须告诉运行将返回未来的代码的线程要返回给定的未来。这是实现承诺的唯一方法。
唉,如果您想进入无证领域,那么下面的代码会执行以下操作boost::promise::setValue:
QFuture<int> f;
int i = 1;
...
f.d.reportResult(&i);
// or
f.d.reportFinished(&i);
Run Code Online (Sandbox Code Playgroud)
我还没有费心去检查它是否有效。