Qt多线程:QtConcurrent + QFuture + QFutureWatcher

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt多线程:QtConcurrent + QFuture + QFutureWatcher相关的知识,希望对你有一定的参考价值。

参考技术A

QtConcurrent 实际是一个命名空间,该命名空间提供了高级API,从而可以在不使用低级线程原语(启动线程、线程间同步、锁等)的情况下编写多线程程序。

但是QtConcurrent仅支持接受纯函数或者lambda表达式,不支持信号和槽,如果需要监听任务执行结果可以通过与QFuture和QFutureWatcher配合来达到。

QFuture 类表示异步计算的结果,使用Qt Concurrent框架中的API启用。

要使用信号和插槽与正在运行的任务进行交互,则需要使用QFutureWatcher。

QFutureWatcher 类允许使用信号和插槽监视QFuture。

简单的例子:

通过运行结果可以发现,QtConccurent管理的线程实际是从线程池分配线程资源的,而绑定QFutureWatcher的槽是在主线程中执行的。
在需要单次执行且内部逻辑较简单的时候使用QtConccurrent+QFuture+QFutureWatcher是很方便的,可以减少很多编码工作量,而且在多cpu环境中,QtConccurent也会启用多核。

以上是关于Qt多线程:QtConcurrent + QFuture + QFutureWatcher的主要内容,如果未能解决你的问题,请参考以下文章

从qt中的另一个线程运行qtconcurrent时如何关闭程序

QtConcurrent 运行的线程 id

QT中QtConcurrent创建并行线程的方法

qt 创建线程

QtConcurrent 错误:对非静态成员的引用

QtConcurrent::run 发出信号