Visual Studio C++精确计时

VS利用QueryPerformanceCounter语句,提供了精确计时的功能,下面用一个简单的例子来展示其使用办法。

例子中,采用Qt的startTimer函数,实现每隔500毫秒触发一次timerEvent()。但是由于qt的timer并不那么准确,造成timerEvent不能保证精确的按照0.5秒来触发。QueryPerformanceCounter就是用来精确的记下每次触发的时间点。记录的时间点通过qDebug打印出来。

头文件:

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_TimeCounter.h"
#include <QTimerEvent>
#include <Windows.h>//不可少 
#include <mmsystem.h>//不可少

class TimeCounter : public QMainWindow
{
	Q_OBJECT

public:
	TimeCounter(QWidget *parent = Q_NULLPTR);
	LARGE_INTEGER		m_nBegin;
	LARGE_INTEGER		m_nFreq;
private:
	Ui::TimeCounterClass ui;
protected:
	void		timerEvent(QTimerEvent *);
};

cpp文件

#include "TimeCounter.h"
#include <qdebug.h>

#pragma comment(lib, "winmm.lib")//不可少 

TimeCounter::TimeCounter(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);

	startTimer(500);
	QueryPerformanceFrequency(&m_nFreq);//获取频率
	QueryPerformanceCounter(&m_nBegin);//获取起始时间
}

void TimeCounter::timerEvent(QTimerEvent * e)
{
	LARGE_INTEGER nTime;
	QueryPerformanceCounter(&nTime);//获取时间 

	//计算从起始时间开始,到当前的时间间隔,单位毫秒
	int iInterval = (nTime.QuadPart - m_nBegin.QuadPart) / (double)m_nFreq.QuadPart * 1000;
	qDebug() << iInterval<<" ms";
}

效果:

可见,相邻时间点之间的间隔并不严格等于500毫秒

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值