首页 > 其他分享 >qt定时器

qt定时器

时间:2024-11-15 10:20:42浏览次数:1  
标签:定时器 qt void mywindows timer elapsed include

首先测试以下qt定时器的精确度
运行结果:timer: 5999 *10 ms
elapsed: 59996
结论:1min的延迟后,误差在6ms内
如果你在 Timeout 槽函数中执行耗时操作,这将会影响定时器的精确性和响应性。

具体来说,Qt 的事件循环是基于单线程模型的,所有事件处理(包括定时器超时事件)都在主线程中进行。
如果 handleTimeout 槽函数中包含耗时操作,那么这段时间内主线程会被阻塞,无法处理其他事件,包括其他定时器事件和用户界面更新。

.h

#ifndef MYWINDOWS_H
#define MYWINDOWS_H
#include <QElapsedTimer>
#include <qtimer.h>

#include <QObject>

class mywindows : public QObject
{
    Q_OBJECT
public:
    explicit mywindows(QObject *parent = nullptr);

private:

    QTimer* timer;
    QElapsedTimer elapsedTimer;
    int clock_count;
    qint64 elapsed;
signals:
    void sign_stop();

public slots:
    void handleTimeout();

    void stopTimer();




};

#endif // MYWINDOWS_H

.cpp

#include "mywindows.h"
#include "qdebug.h"

mywindows::mywindows(QObject *parent) : QObject(parent)
  , clock_count(0)
  , elapsed(0)
{
    timer=new QTimer(this);

    elapsedTimer.start();
    connect(timer, &QTimer::timeout, this, &mywindows::handleTimeout);
    connect(this,&mywindows::sign_stop,this,&mywindows::stopTimer);
    timer->start(10); // 设置定时器间隔为10毫秒
    elapsed= elapsedTimer.elapsed();
}

void mywindows::handleTimeout()
{
    ++clock_count;
}

void mywindows::stopTimer()
{
    elapsed=elapsedTimer.elapsed()-elapsed;
    timer->stop();
    qDebug()<<"timer:"<<clock_count <<"*10 ms";
    qDebug()<<"elapsed: "<<elapsed;
}

main.cpp

#include <QCoreApplication>
#include <QTimer>
#include <qdebug.h>
#include "mywindows.h"

int main(int argc, char *argv[])
{


    QCoreApplication a(argc, argv);

    // 创建 MainWindow 实例
       mywindows mainWindow;
       //mainWindow.show(); // 显示主窗口

       // 延迟 60 秒
       QEventLoop loop;
       QTimer::singleShot(60 * 1000, &loop, &QEventLoop::quit);
       loop.exec();

       // 发射 sign_stop 信号
       emit mainWindow.sign_stop();



    int val=a.exec();

    return val;
}

标签:定时器,qt,void,mywindows,timer,elapsed,include
From: https://www.cnblogs.com/light-LifeClub/p/18547459

相关文章

  • Qt/C++地图高级绘图/指定唯一标识添加删除修改/动态显示和隐藏/支持天地图高德地图百
    一、前言说明已经有了最基础的接口用来添加覆盖物,而且还有通过进入覆盖物模式动态添加覆盖物的功能,为什么还要来个高级绘图?因为又有新的需求,给钱就搞,一点底线都没有。无论哪个地图厂家,提供的接口都是没有唯一标识参数的,也就类似于学号,这就是需要自己主动定一个属性用来存储唯一标......
  • [QT][NCNN][YOLOV8-SEG]使用ncnn框架部署yolov8-seg,外加qt进行界面可视化操作,用于图片
    yolov8seg_qt_ncnn使用ncnn框架部署yolov8-seg,外加qt进行界面可视化操作,用于图片和视频实例分割推理。Github地址:https://github.com/zhahoi/yolov8seg_qt_ncnn起一直以来自己做算法部署或者是模型推理,最后总是需要在命令行敲各种命令,然后通常借助opencv进行可视化。老......
  • 如果在整个项目中 QTcpSocket 被多次引用,并且多个对象或类需要共享同一个 QTcpSocket
    如果在整个项目中QTcpSocket被多次引用,并且多个对象或类需要共享同一个QTcpSocket实例,那么使用QSharedPointer<QTcpSocket>是一个不错的选择。以下是使用QSharedPointer<QTcpSocket>的优点、注意事项以及一些替代方案的建议。为什么推荐使用QSharedPointer<QTcpSo......
  • c++ 标准 智能指针 与 qt 智能指针 对比
    C++标准库提供了std::unique_ptr和std::shared_ptr等智能指针,而Qt则提供了QScopedPointer、QSharedPointer和QWeakPointer等自己的智能指针。两者在设计上有一些相似之处,但也存在一些关键的差异。下面是C++标准智能指针和Qt智能指针的详细对比:1.std::uniq......
  • QT: 操作主从视图及XML
    按钮绑定信号、槽控件属性  运行效果:  connectdlg.h #ifndefCONNECTDLG_H#defineCONNECTDLG_H#include<QDialog>#include<QMessageBox>classQSqlError;namespaceUi{classConnDlg;}classConnDlg:publicQDialog{Q_OBJECTpublic:......
  • 项目实战:Qt+OpenCV透视变换工具v1.1.0(支持打开图片、输出棋盘角点、调整偏移点、导出
    需求  1.打开图片;  2.矫正识别角点;  3.四点对应偏移距离;  4.支持设置棋盘格的行列角点数;  5.导出结果图片; 背景  深入研究图像拼接细分支算法,产出的效果查看工具,验证算法单步思路。 相关博客  《项目实战:Qt+OpenCV透视变换工具v1.1.0(支持打开图......
  • Qt | 串口调试工具实现
    点击上方"蓝字"关注我们01、QSerialPort>>>QSerialPort是Qt框架中的一个类,用于串行通信。它提供了一个简单的接口,允许开发者通过串口与外部设备(如传感器、相机、单片机等)进行数据交换。QSerialPort支持多种串口操作,可以方便地设置波特率、数据位、停止位和校验位等通......
  • 【Qt 蓝牙服务器实现】
    在Qt中实现一个蓝牙服务器可以使用QtBluetooth模块。下面是一个基本的蓝牙服务器示例,它能够接受来自客户端的连接。首先,请确保你已经安装了QtBluetooth模块并在项目文件中包含了相关库。1.项目文件(.pro)配置在项目文件中添加以下行,以确保包含QtBluetooth......
  • 分享一个select+定时器的一个代码
    问题1:下面代码输出什么packagemainimport( "fmt" "time")funcmain(){ //创建两个定时器,一个间隔为1秒,另一个间隔为2秒 ticker1:=time.NewTicker(1*time.Second) ticker2:=time.NewTicker(2*time.Second) //在一个新的goroutine中运行监听逻辑 gofun......
  • 【QT】解决生成的exe文件出现“无法定位程序入口”或“找不到xxx.dll”的问题
    【QT】解决生成的exe文件出现“无法定位程序入口”或“找不到xxx.dll”的问题零、问题使用QT编译好项目后,想直接在文件资源管理器中运行exe程序或想分享出去给别人使用发现出现如下问题:系统错误:找不到xxx.dll。无法找到入口:无法定位程序输入点xxx。下文将介绍如何解决以......