今天看Qt高级编程中第七章(用QtConcurrent实现线程处理)看得好困,感觉智商不够用啊。 但为了理清思绪还是要好好总结一下,学到一点是一点。
QtConcurrent::run()的形式是:QFuture<T> fun(Function,....); 传入一个函数,和它的参数们。
它的作用是在Qt全局线程池中的一个辅助线程中执行该函数。 感情是不用自己创建线程了么。
写个简单的例子看看:
写一个函数,只有一个参数
void count( int nflag )
{
static int a = 0;
static int b = 1;
if(nflag%2)
{
qDebug()<<b<<QThread::currentThreadId();
b += 2;
}
else
{
qDebug()<<a<<QThread::currentThreadId();
a += 2;
}
}
找个地方调用:
int a = 1;
QtConcurrent::run(count,a);
int b = 2;
QtConcurrent::run(count,b);
执行结果:
1 0x1f60
0 0x1fc4
可见count函数是在两个线程中执行的。 最简单的使用就是这样了。
注:Qt::Concurrent::run() 有两个缺点: 1.没有对信号和槽的支持 2.当处理结束时,没有通知提示。
更多详细内容请查看:fearlazy.com