使用QT自带定时接口,实现linux用户态设备的轮询,根据指定条件,发出信号,以供特定的槽函数连接使用。

my_timer.h

  • 使用信号和槽Q_OBJECT是必须要有的
  • 这个自定义类中只是给出了定时器时间到要做什么处理hanleTimeOut()
  • sensorValueIsChange()是信号函数,将来需要发射和连接的函数
  • 构造函数为nullptr是为了在别处调用时,不用指定传入参数
#ifndef MY_TIMER_H
#define MY_TIMER_H

#include"i2c_sensor.h"
#include<QDebug>
#include<QTimerEvent>
#include<QObject>
#include<stdlib.h>

class a7TestTimer:public QObject
{
    Q_OBJECT
signals:
    void sensorValueIsChange(void);
public:
    a7TestTimer(QObject* parent = nullptr);
    ~a7TestTimer();
    void handleTimeOut();
    virtual void timerEvent(QTimerEvent *event);

private:
    int a7TimerID;
    int result_int = 0;
    string result;
};


#endif // MY_TIMER_H

my_timer.cpp

#include"my_timer.h"


#define A7TESTTIMEROUT (1000) //1s

a7TestTimer::a7TestTimer(QObject*parent):QObject (parent)
{
    a7TimerID = this->startTimer(A7TESTTIMEROUT);
}


a7TestTimer::~a7TestTimer()
{
    killTimer(a7TimerID);
}

void a7TestTimer::timerEvent(QTimerEvent *event)
{
    if(event->timerId() == a7TimerID){
        handleTimeOut();
    }
}

void a7TestTimer::handleTimeOut()
{
    //qDebug()<< "**************ok  time handle!!!!!!!!!" <<endl;
    //做自己必要的处理,比如几秒轮询一次端口等
    if(判断条件)
    {
        emit sensorValueIsChange();
    }else {
       qDebug()<<“......”<<endl;
    }

}



mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    a7TestTimer *timetest = new a7TestTimer();
    connect(timetest,SIGNAL(sensorValueIsChange()),this,SLOT(signale_handle()));
    qDebug()<<"connect ok!"<<endl;
}

void MainWindow::signale_handle()
{
    qDebug()<<"**************detected closed*************"<<endl;
}

槽函数signale_handle()需要在mainwindow类,或者自己使用的主窗口类中声明。

或者使用定时器timer类:

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);

使用B包方式:


    scanHeadTimer = new QTimer(this);
    connect(scanHeadTimer,&QTimer::timeout,[=](){
      a7PollTimer::scanSensorDistance();
    });
    scanHeadTimer->start(10);

 

Logo

更多推荐