qt中延迟调用函数(可用于多线程)

最近在工作中遇到一个需求,多线程情况下想把函数"存起来",每隔一定时间取一个存的最早的调用,于是想到了用缓冲区+STL的function方法来实现,特此记录一下用法.

讲解

我们在类内创建一个缓冲区QList<std::function<void()>> m_lFunc;专门用于存放各种函数
添加函数的时候使用QList自带的push_back放入m_lFunc.push_back(std::bind(&MainWindow::getNum, this, i)); 然后使用m_lFunc.front()取一个函数,用m_lFunc.front()();调用它.

std::bind用法

绑定成员函数,第一个参数是类名+域作用符::+函数的名称,第二个参数是对象的指针,后面按顺序依次添加该函数的参数

实例代码:每次点击按钮时执行一个函数

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPainter>
#include <QProxyStyle>
#include <QStyleOptionTab>
#include <QObject>
#include <QDebug>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

    void printLog(QString qsStr);

    void getNum(int iNum);
private slots:
    void on_pushButton_clicked();

private:
    QList<std::function<void()>> m_lFunc;

    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDesktopWidget>
#include <functional>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    for(int i = 1; i <= 10; i++){
        m_lFunc.push_back(std::bind(&MainWindow::getNum, this, i));
    }
    m_lFunc.push_back(std::bind(&MainWindow::printLog, this, "测试信息"));
}

void MainWindow::printLog(QString str){
    qDebug() << "日志打印:" << str;
}

void MainWindow::getNum(int iNum){
    qDebug() << "当前序号:" << iNum;
}

void MainWindow::on_pushButton_clicked()
{
    if(m_lFunc.isEmpty())return;
    m_lFunc.front()();
    m_lFunc.pop_front();
}

MainWindow::~MainWindow()
{
    delete ui;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值