当我们想在一个或多个辅助线程执行的同时做一些后台处理且无须使用QThread所提供的全部功能和灵活性时,就可以使用QRunnable和QtConcurrent::run()方法.
QtConcurrent::run()函数的参数包含一个函数,一个或多个传递给函数的可选参数,它会在Qt全局线程池中的一个辅助线程中执行该函数
使用无阻塞QtConcurrent函数涉及到一些建立辅助线程的开销,以及在模型或图形场景数据的情况下建立替代项.如果每一项的进程足够复杂,这些开销就可以得到补偿,特别是在有大量的项需要处理的情况下.
QtConcurrent是对大是不是项进行复杂计算的理想选择,有些情况是处理一个或一些拥有复杂处理进程的项,而不牺牲用户因而的反馈性能.一种解决方法是使用QtConcurrent::run或QRunnable,如果希望更好地控制Qt的信号和槽机制,享受它所带来的便利,使用QThread或许是更好的选择.
#include<QThread>
#include<QtConcurrentRun>
#include<QDebug>
void fun(int i,int j)
{
qDebug() << i << j ;
}
int main()
{
QtConcurrent::run(fun,1,2);//和boost::bind有点类似
qDebug() << QThread::idealThreadCount();
}
1 2
2 //我想这或许是因为我的电脑是双核的
QtConcurrent还有过滤和映射一些功能.