PyQt5——QTimer提高精度至毫秒级别,时间误差自动补偿

2024-04-24 07:38

本文主要是介绍PyQt5——QTimer提高精度至毫秒级别,时间误差自动补偿,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在实现定时采集气象传感器的数据。在软件实现方面,用PyQt5框架的QTimer实现定时读取传感器信息,但在做测试实验的过程中发现QTimer的精度误差太大,原计划每1秒读一次数据,随着时间的延长,无法实现精确度为1s的读取。

因此在网上找到了解决办法。下面给出python代码以及测试结果。

代码:

from PyQt5.QtCore import QTimer
import datetime as dt
from PyQt5.QtCore import Qt
from PyQt5.QtCore import QThreadclass QThreadSensorData(QThread):def __init__(self):super().__init__()self.timerPrin()def timerPrin(self):self.timer = QTimer(self) self.timer.setTimerType(Qt.PreciseTimer)  # 关键的一步,取消默认的精度设置self.timer.timeout.connect(self.printTime)  # 打印当前的时间self.timer.start(1000.00)  # 定时为1秒触发def printTime(self):print(dt.datetime.now())if __name__ == "__main__":import sysfrom PyQt5.QtWidgets import QApplicationapp = QApplication(sys.argv)data = QThreadSensorData()data.start()sys.exit(app.exec_())

测试结果:

2020-03-11 22:07:27.401657
2020-03-11 22:07:28.402388
2020-03-11 22:07:29.402548
2020-03-11 22:07:30.402515
2020-03-11 22:07:31.402232
2020-03-11 22:07:32.402093
2020-03-11 22:07:33.402350
2020-03-11 22:07:34.401576
2020-03-11 22:07:35.401716
2020-03-11 22:07:36.401798
2020-03-11 22:07:37.402517
2020-03-11 22:07:38.401717
2020-03-11 22:07:39.401757
2020-03-11 22:07:40.401661
2020-03-11 22:07:41.402510
2020-03-11 22:07:42.402466
2020-03-11 22:07:43.401694
2020-03-11 22:07:44.402286
2020-03-11 22:07:45.401995
2020-03-11 22:07:46.401936
2020-03-11 22:07:47.401721
2020-03-11 22:07:48.401690
2020-03-11 22:07:49.402235
2020-03-11 22:07:50.402019
2020-03-11 22:07:51.402400
2020-03-11 22:07:52.402513
2020-03-11 22:07:53.402245
2020-03-11 22:07:54.401553
2020-03-11 22:07:55.402231
2020-03-11 22:07:56.401617

刚开始的毫秒为:.401,运行29秒后,毫秒为.401,即使在中间出现了.402,通过设置

self.timer.setTimerType(Qt.PreciseTimer)

实现了误差自动补偿,实现了每秒读取数据的功能。

参考资料:

[1] hong_chase, Qt学习笔记-定时器的应用及精度设置, 2017.09, CSDN.

这篇关于PyQt5——QTimer提高精度至毫秒级别,时间误差自动补偿的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/931136

相关文章

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

《SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南》本文将基于开源项目springboot-easyexcel-batch进行解析与扩展,手把手教大家如何在SpringBo... 目录项目结构概览核心依赖百万级导出实战场景核心代码效果百万级导入实战场景监听器和Service(核心

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略