mark一下,QT线程使用:
//可以waitForFinished等待执行完成,但是无法暂停和取消
//调用外部函数
QFuture<void> f1 =QtConcurrent::run(func,QString(index++));
//调用类成员函数(分为const引用和指针)
QFuture<void> f2 =QtConcurrent::run(this,&Widget::myFunc,QString("aaa"));
//使用Lambda函数实现
QFuture < void > future = QtConcurrent::run([=](){
qDebug() << __FUNCTION__ << QThread::currentThreadId() << QThread::currentThread();
});
QThread使用 操作对象.movetoThread(子线程);connect时使用
QThread *thread = new QThread;
Worker*worker = new Worker;
connect(worker,SIGNAL(finished()),thread,SLOT(quit())); //手动退出线程,触发finish,否则线程不会退出
connect(thread,SIGNAL(started()),worker,SLOT(doSomething())); //触发工作线程的具体工作,也可以其它方式触发
connect(thread,SIGNAL(finished()),worker,SLOT(deleteLater())); //线程结束后释放资源
connect(thread,SIGNAL(finished()),thread,SLOT(deleteLater())); //线程结束后释放资源
//注意:
//这里的connect默认是使用auto(信号函数的对象所在线程如果和槽函数的对象所在线程相同则相当于Direct-直接同线程执行槽函数;否则槽函数的工作线程为自己的对象所在线程)模式。
//如果当前使用的是Direct模式则忽略槽函数对象所在线程,直接使用信号函数的对象线程
worker->moveToThread(thread);
thread->start();