目录
一.QtConcurrent
QtCurrent模块能处理一些常见的并行计算:map、filter和reduce。它们返回一个QFuture对象,该对象可用于获取函数执行的结果。QFuture还可用于查询计算进度和暂停/恢复/取消计算。为了方便起见,QFutureWatcher可以通过信号和插槽与QFuture进行交互。
QtCurrent的map、filter和reduce算法自动将计算分布到所有可用的处理器核上,因此,当QtCurrent在多核系统上更有优势。
该模块还提供了QtConcurrent::run()函数,它可以在另一个线程中运行任何函数。QFuture可用于获取函数的返回值,并检查线程是否正在运行。但是,QtConcurrent::run()仅启动一个线程,无法暂停/恢复/取消,也无法查询计算进度。
本文中主要讨论QtConcurrent::run()的用法,使用QtConcurrent模块,需要在 .pro 中添加: QT += concurrent
1.在单独的线程中运行函数
extern void aFunction();
QFuture<void> future = QtConcurrent::run(aFunction)
此时函数aFunction运行于从默认QThreadPool获取的一个线程中。可以用QFuture和QFutureWathcer类来监控该函数运行的状态
如果用指定的QThreadPool,可以定义一个,并作为第