【Qt】QtConCurrent::run調用成員函數

 

使用成員函數

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();
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章