Qt并发处理 QtConcurrent

pro文件:

QT          += concurrent

h文件:

#include <QMainWindow>
#include <QEvent>
#include <QtConcurrent/QtConcurrent>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    bool event ( QEvent * event );

public slots:
    void pushbtnClickSL();


private:
    Ui::MainWindow *ui;
};



///

void thread_add(QObject *receiver,int a,int b);

struct ProgressEvent : public QEvent

{

    enum {EventId = QEvent::User+1};

    explicit ProgressEvent(bool saved_, const QString &message_)

        : QEvent(static_cast<Type>(EventId)),

          saved(saved_), message(message_) {}

    const bool saved;

    const QString message;

};
cpp文件:
void MainWindow::pushbtnClickSL()
{
    for(int i=0;i<99;i++)

        for(int j=0;j<99;j++)

    QtConcurrent::run(thread_add,this,i,j);
}


void thread_add(QObject *receiver,int a,int b)
{

    QString message = QString("%1 + %2 = %3   ThreadId : %4").arg(a).arg(b).arg(a + b).arg((unsigned long long)QThread::currentThreadId());
    QApplication::postEvent(receiver,new ProgressEvent(true, message));

}


bool MainWindow::event ( QEvent * event )
{

    if (event->type() == static_cast<QEvent::Type>(ProgressEvent::EventId)) {

        ProgressEvent *progressEvent = static_cast<ProgressEvent*>(event);

        Q_ASSERT(progressEvent);

        qDebug()<< progressEvent->message;

        return true;
    }
    return QMainWindow::event(event);

}

demo下载链接:

https://download.csdn.net/download/qq_27175513/10372975

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值