多线程发出的信号使用Lambda槽函数处理,那槽函数在多线程中运行
// m_pImageTcpSocket放在多线程中,下面打印的线程id为多线程的id
QObject::connect(m_pImageTcpSocket, &ImageTcpSocket::dataReceived, [&](const QByteArray &data) {
qDebug() << "dataReceived" << QThread::currentThreadId();
});
退出程序时等待多线程完成
QObject::connect(QApplication::instance(), &QApplication::aboutToQuit, [this]() {
// 判断 QtConcurrent::run 是否在运行
if (future.isRunning()) {
// 等待任务完成
future.waitForFinished();
}
});
QtConcurrent::mapped在类中的写法
Test::Test()
{
QVector<int> inputVector = {1, 2, 3, 4, 5};
QFuture<int> future = QtConcurrent::mapped(inputVector, std::bind(&Test::square, this, std::placeholders::_1));
m_watcher.setFuture(future);
QObject::connect(&m_watcher, &QFutureWatcher<int>::finished, [&]() {
// 获取映射操作的结果并输出
QFuture<int> finishedFuture = m_watcher.future();
QList<int> resultVector = finishedFuture.results();
for (int value : resultVector) {
qDebug() << "Test" << value;
}
});
}
int Test::square(int value)
{
return value * value;
}