一,Qt实现多线程的几种方式:
1.QThread继承run()方式。
2.QThread使用消息队列的方式。
3.QThread moveToThread的方式。
4.QtConcurrent::run(std::function<void ()> functionToRun) 拉姆达的方式。
5.QThreadPool::globalInstance()->start(std::function<void ()> functionToRun)的方式。
二,不同场景下的抉择:
个人认为线程执行的时间长短,重复次数以及任务的复杂度决定我们选择的线程方式。
1. 如果是简单的执行,或者说代码量小的选择方式4:
void testConCurrent()
{
qDebug() << "main thread id: " << QThread::currentThreadId();
int var = 1;
QtConcurrent::run([&var](){
qDebug() << "work thread id: " << QThread::currentThreadId();
while(var < 100) {
QThread::sleep(1);
var ++;
}
});
while(var < 100) {
qDebug() << "var: " << var;
QThread::sleep(1);