QT中有用QThread处理线程,用法也有多种。以前写过一篇:
https://blog.csdn.net/liukang325/article/details/50454409
后来发现QtConcurrent也很好用。
需要先在pro中加入模块
QT += concurrent
下面是一个官方的例子:
#include <QApplication>
#include <QDebug>
#include <QThread>
#include <QString>
#include <QtConcurrent>
void func(QString name)
{
qDebug() << "Hello" << name << "from" << QThread::currentThread();
}
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QFuture<void> fut1 = QtConcurrent::run(func, QString("Thread 1"));
QFuture<void> fut2 = QtConcurrent::run(func, QString("Thread 2"));
fut1.waitForFinished();
fut2.waitForFinished();
}
也可以用
//放入一个线程处理,避免该段代码阻塞运行会让界面卡住
QtConcurrent::run([&](AgainstLottery* pthis)
{
...
emit getResultFinishedSignals();
}, this);
//getResultFinishedSignals待此信号发出说明http处理完成,否则就阻塞一下
QEventLoop loop;
QObject::connect(this, &AgainstLottery::getResultFinishedSignals, &loop, &QEventLoop::quit);
loop.exec();
//同waitForFinished()