QT: 一种精确定时器类的实现与使用

1)类的实现

#ifndef CPRECISETIMER_H
#define CPRECISETIMER_H#include <windows.h>class CPreciseTimer
{
public:CPreciseTimer();bool SupportsHighResCounter();void StartTimer();void StopTimer();__int64 GetTime();private://Auxiliary Functionvoid UpdateElapsed();//Member variablesbool m_bRunning;__int64 m_i64Start;__int64 m_i64Elapsed;//Some auxiliary variables__int64 m_i64Counts;LARGE_INTEGER m_liCount;//Static Variablesstatic bool sm_bInit;static bool sm_bPerformanceCounter;static __int64 sm_i64Freq;
};inline bool CPreciseTimer::SupportsHighResCounter()
{return sm_bPerformanceCounter;
}//Auxiliary Function
inline void CPreciseTimer::UpdateElapsed()
{if(true == sm_bPerformanceCounter){QueryPerformanceCounter(&m_liCount);m_i64Counts = ((__int64)m_liCount.HighPart << 32) + (__int64)m_liCount.LowPart;//Transform in microseconds(m_i64Counts *= 1000000) /= sm_i64Freq;}else//Transform milliseconds to microsecondsm_i64Counts = (__int64)GetTickCount() * 1000;if(m_i64Counts > m_i64Start)m_i64Elapsed = m_i64Counts - m_i64Start;else//Eliminate possible number overflow (0x7fffffffffffffff is the maximal __int64 positive number)m_i64Elapsed = (0x7fffffffffffffff - m_i64Start) + m_i64Counts;
}#endif // CPRECISETIMER_H
#include "cprecisetimer.h"bool CPreciseTimer::sm_bInit = false;
bool CPreciseTimer::sm_bPerformanceCounter;
__int64 CPreciseTimer::sm_i64Freq;//CONSTRUCTOR
CPreciseTimer::CPreciseTimer() : m_i64Start(0), m_i64Elapsed(0), m_bRunning(false)
{//Only if not already initializedif(false == sm_bInit){//Initializing some static variables dependent on the system just onceLARGE_INTEGER liFreq;if(TRUE == QueryPerformanceFrequency(&liFreq)){//Only if the system is supporting High Performancesm_i64Freq = ((__int64)liFreq.HighPart << 32) + (__int64)liFreq.LowPart;sm_bPerformanceCounter = true;}elsesm_bPerformanceCounter = false;sm_bInit = true;}
}void CPreciseTimer::StartTimer()
{if(true == sm_bPerformanceCounter){QueryPerformanceCounter(&m_liCount);m_i64Start = ((__int64)m_liCount.HighPart << 32) + (__int64)m_liCount.LowPart;//Transform in microseconds(m_i64Start *= 1000000) /= sm_i64Freq;}else//Transform milliseconds to microsecondsm_i64Start = (__int64)GetTickCount() * 1000;m_bRunning = true;
}void CPreciseTimer::StopTimer()
{UpdateElapsed();m_bRunning = false;
}__int64 CPreciseTimer::GetTime()
{if(true == m_bRunning)UpdateElapsed();return m_i64Elapsed;
}

2)类的使用

.......

CPreciseTimer preciseTimer;

        // start the timer
        preciseTimer.StartTimer();

//here do something ...

        // Stop the timer
        preciseTimer.StopTimer();

//get the time count

preciseTimer.GetTime();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/103893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GraphQL 查询:一个全面指南

GraphQL GraphQL 是一种 API 查询语言和运行时&#xff0c;用于使用现有数据完成这些查询。它为您的 API 中的数据提供了完整且易于理解的描述&#xff0c;让客户能够准确地询问他们需要什么&#xff0c;更容易随着时间的推移发展 API&#xff0c;并启用强大的开发人员工具。 …

TypeScript React(上)

目录 扩展学习资料 TypeScript设计原则 TypeScript基础 语法基础 变量声明 JavaScript声明变量 TypeScript声明变量 示例 接口 (标准类型-Interface) 类型别名-Type 接口 VS 类型别名 类型断言:欺骗TS&#xff0c;肯定数据符合结构 泛型、<大写字母> 扩展学习…

IDEA 配置 云服务器远程部署

目录 参考资料远程部署与远程开发远程连接配置配置成功&#xff1a;同步文件自动更新文件配置自动更新文件参数调整正确运行问题1&#xff1a;运行mvn spring-boot:run之后一直卡在第一条下载问题2&#xff1a;运行成功后访问不到问题3&#xff1a;无法配置远程开发 参考资料 …

4.springcloudalibaba sentinel v1.8.6版本服务搭建

文章目录 前言一、sentinel服务端安装1.1 服务端下载1.2 启动sentinel服务 二、客户端使用sentinel2.1.pom增加sentinel包2.2 增加配置2.3 启动服务 三、验证3.1 给hello接口增加流控规则3.2 测试结果如下 总结 前言 前面完成了gateway项目部署并且测试&#xff0c;现在部署搭…

springboot vue 部署至Rocky(Centos)并自启,本文部署是若依应用

概述 1、安装nohup&#xff08;后台进程运行java&#xff09; 2、安装中文字体&#xff08;防止中文乱码&#xff09; 3、安装chrony&#xff08;保证分布式部署时间的一致性&#xff09; 5、安装mysql数据&#xff0c;迁移目录&#xff0c;并授权自启动&#xff1b; 6、安…

C语言--以pthread为例建立一个h文件测试代码

pthread 1、新建一个demoC CMakeLists.txt加入依赖 target_link_libraries(demoC -pthread) 2、依赖 #include <pthread.h> #include <stdio.h> 3、定义头文件 pthread_test.h 头文件中定义函数 #include <pthread.h> #include <stdio.h> void *thre…

UI自动化测试:Selenium+PO模式+Pytest+Allure整合

本人目前工作中未涉及到WebUI自动化测试&#xff0c;但为了提升自己的技术&#xff0c;多学习一点还是没有坏处的&#xff0c;废话不多说了&#xff0c;目前主流的webUI测试框架应该还是selenium&#xff0c;考虑到可维护性、拓展性、复用性等&#xff0c;我们采用PO模式去写我…

基于Dockerfile搭建LNMP环境

准备工作 #关闭防火墙和防护机制 systemctl stop firewalld systemctl disable firewalld setenforce 0 docker network create --subnet172.18.0.0/16 --opt "com.docker.network.bridge.name""docker1" mynetwork#设置自定义网络模式&#xff0c;模…

计算机网路之https相关

1、基础 https并不是一个单独的协议&#xff0c;只是在http的基础上用TLS/SSL进行加密。SSL是TLS的前身&#xff0c;都是加密协议&#xff0c;现在绝大部分浏览器都是支持TLS。 2、https的加密方式 &#xff08;1&#xff09;对称加密&#xff0c;双方使用同样的加密和解密规则…

力扣:611. 有效三角形的个数

今日为大家分享一道力扣611有效三角形的个数&#xff01;本文将会为大家为大家讲解题目&#xff0c;然后算法思路&#xff0c;最后再进行代码的实现&#xff01;希望看完本文能对读者有一定的收获&#xff01; 一、题目描述 通过题目的描述可以看出&#xff0c;意思是给定一个…

Go If流程控制与快乐路径原则

Go if流程控制与快乐路径原则 文章目录 Go if流程控制与快乐路径原则一、流程控制基本介绍二、if 语句2.1 if 语句介绍2.2 单分支结构的 if 语句形式2.3 Go 的 if 语句的特点2.3.1 分支代码块左大括号与if同行2.3.2 条件表达式不需要括号 三、操作符3.1 逻辑操作符3.2 操作符的…

Linux:redis的基础操作

redis介绍&#xff0c;安装和性能测试 Linux&#xff1a;redis数据库源码包安装-CSDN博客https://blog.csdn.net/w14768855/article/details/133752744?spm1001.2014.3001.5501如果没有了解过redis那么一定要去看看介绍 登录 redis-cli 可以登录到本机127.0.0.1&#xff0c;…

C++学习——静态成员变量、静态成员函数

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 一、静态成员变量详解 1、被static修饰 1不同的对象占用不同的内存&#xff0c;这使得不同对象的成员变量相互独立&#xff0c;因此它们的值不受其他对象的影响。例如有两个相同类型…

没用的知识增加了,尝试用文心实现褒义词贬义词快速分类

尝试用文心实现褒义词贬义词快速分类 一、我的需求二、项目环境搭建千帆SDK安装及使用流程 三、项目实现过程创建应用获取签名调用接口计算向量积总结 百度世界大会将于10月17日在北京首钢园举办&#xff0c;今天进入倒计时五天了。通过官方渠道的信息了解到&#xff0c;这次是…

Jmeter连接mysql数据库详细步骤

一、一般平常工作中使用jmeter 连接数据库的作用 主要包括&#xff1a; 1、本身对数据库进行测试&#xff08;功能、性能测试&#xff09;时会需要使用jmeter连接数据库 2、功能测试时&#xff0c;测试出来的结果需要和数据库中的数据进行对比是否正确一致。这时候可以通过j…

XML外部实体注入攻击XXE

xml是扩展性标记语言&#xff0c;来标记数据、定义数据类型&#xff0c;是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义&#xff08;可选&#xff09;、文档元素&#xff0c;一般无法直接打开&#xff0c;可以选择用excl或记事本打…

内存空间的分配与回收之连续分配管理方式

1.连续分配管理方式 连续分配:指为用户进程分配的必须是一个连续的内存空间。 1.单一连续分配 在单一连续分配方式中&#xff0c;内存被分为系统区和用户区。系统区通常位于内存的低地址部分&#xff0c;用于存放操作系统相关数据;用户区用于存放用户进程相关数据。内存中只…

BES耳机空间音频技术实现

BES耳机空间音频技术实现 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?加我微信hezkz17, 本群提供音频技术答疑服务 音响和耳机在空间音频技术上实现方式是不同的 虚拟现实可谓是空间音频技术最具代表性的应 用领域。虽然虚拟现实的起源可以追溯到1 9 6 8年, …

2023年淘宝天猫双11活动时间什么时候开始到几月几号结束?

2023年淘宝天猫双11超级红包领取时间 第一阶段&#xff1a;2023年10月24日20:00 至11月03日23:59 第二阶段&#xff1a;2023年11月04日00:00 至 11月11日23:59 2023年淘宝天猫双11超级红包使用时间 第一阶段&#xff1a;2023年10月31日20:00 至11月03日23:59 第二阶段&…

字符串左旋 与 字符串旋转结果

字符串左旋 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 例如&#xff1a; ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法1 三步翻转法 要求:abcdef 左旋两个 整体逆序:fedcba左边逆序:cdef ba右边逆序:cdef ab #include<stdio.h> #include<…