使用成員函數
QtConcurrent :: run()也接受指向成員函數的指針。第一個參數必須是一個const引用或一個指向該類實例的指針。const成員函數一般傳遞 常量引用 (const reference),而非常量成員函數一般傳遞 指針 (pointer)
例如,在一個單獨的線程中調用QByteArray :: split()(一個const成員函數)就像這樣完成:
---------------------
版權聲明:本文爲CSDN博主「luoyayun361」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/luoyayun361/article/details/80288610
#include "widget.h"
#include <QDebug>
#include <QThread>
#include <QtConcurrent>
#include <QFuture>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
m_pBtn = new QPushButton("Click me",this);
m_pBtn->setGeometry(100,100,220,70);
connect(m_pBtn,&QPushButton::clicked,this,&Widget::onBtnClicked);
}
void Widget::onBtnClicked()
{
#if 1
//調用外部函數
QFuture<void> f1 =QtConcurrent::run(func,QString(index++));
//調用類成員函數
QFuture<void> f2 =QtConcurrent::run(this,&Widget::myFunc,QString("aaa"));
#else //使用Lambda函數實現
QFuture < void > future = QtConcurrent::run([=](){
qDebug() << __FUNCTION__ << QThread::currentThreadId() << QThread::currentThread();
});
QFuture < void > future2 = QtConcurrent::run([=](){
qDebug() << __FUNCTION__ << QThread::currentThreadId() << QThread::currentThread();
});
#endif
}
void Widget::myFunc(const QString & str)
{
qDebug() << __FUNCTION__ << str << QThread::currentThreadId() << QThread::currentThread();
}
void func(QString str)
{
qDebug() << __FUNCTION__ << str << QThread::currentThreadId() << QThread::currentThread();
}