为什么与两者相比,我得到的毫秒值不同(QTIme和QueryPerformanceCounter)
why am getting different milliseconds value in compared to both (QTIme & QueryPerformanceCounter)
my .h 文件
#ifndef ITime_H
#define ITime_H
#include <QDebug>
#include <iostream>
#include <QtCore>
#include <windows.h>
class ITime
{
public:
ITime();
~ITime();
void start();
quint64 milli();
quint64 elapsed();
public:
QTime oStartTime;
QTime oEndTime;
LARGE_INTEGER ntime1,ntime2;
LARGE_INTEGER freq;
};
#endif // ITime_H
\\
我的 CPP 文件
#include <QTime>
#include <QtCore>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
ITime::ITime()
{
}
ITime::~ITime()
{
}
void ITime::start()
{
oStartTime = QTime::currentTime();
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&ntime1);
}
quint64 ITime::milli()
{
quint64 milli = oStartTime.msecsTo(oEndTime);
return milli;
}
quint64 ITime::elapsed()
{
quint64 ntime = 0;
QueryPerformanceCounter(&ntime2);
oEndTime = QTime::currentTime();
ntime = (ntime2.QuadPart-ntime1.QuadPart)/(freq.QuadPart/1000000.0);
double elapsedMilliseconds = elapsedTicks.QuadPart / (freq.QuadPart/ 1000.0);
qDebug() << "milli seconds by counter :" << elapsedMilliseconds ;
return ntime;
}
\\
我的主文件
#include "ITime.h"
#include <iostream>
int main()
{
ITime time;
time.start();
qDebug() << "Start time" << time.oStartTime ;
qDebug() << "differnce time in micro by counter" << time.elapsed() ;
qDebug() << "differnce time in milli " << time.milli() ;
qDebug() << "End time" << time.oEndTime ;
}
我的输出是这样的
开始时间QTime("17:57:46"(计数器毫秒数:1.20633微计数器差分时间:1206使用 QTime 的差分时间(以毫为单位(:0结束时间 QTime("17:57:46"(
在这里,通过考虑输出微秒是计数器的1206,它意味着几乎1毫秒,但在输出毫秒中是QTime的0,那么我怎么能得到相同的毫秒和微秒差异
实际上我想知道为什么QTime和计数器之间存在时间差异
>QueryPerformanceFrequency
以"每秒计数"为单位提供计数器频率。这意味着无论QueryPerformanceCounter
返回什么,都将与QueryPerformanceFrequency
一开始提供的除数来表示。换句话说(假设您可以针对一个对QuadPart
进行算术的系统,这是极有可能的(......
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
LARGE_INTEGER startTicks;
QueryPerformanceCounter(&startTicks);
//Do work here
LARGE_INTEGER endTicks;
QueryPerformanceCounter(&endTicks);
LARGE_INTEGER elapsedTicks;
elapsedTicks.QuadPart = endTicks.QuadPart - startTicks.QuadPart;
double elapsedMicoseconds = elapsedTicks.QuadPart / (freq.QuadPart / 1000000.0);
double elapsedMilliseconds = elapsedTicks.QuadPart / (freq.QuadPart / 1000.0);
double elapsedSeconds = elapsedTicks.QuadPart / (double)freq.QuadPart;
。应该回答你的问题。您可以将其分解为任何您认为合适的方式,包括截断为SS.MMMMM
(秒和毫秒(等形式。
另请注意,您应该只调用QueryPerformanceFrequency
一次并保存结果,因为它在系统启动之间不会更改,并且只是第一次启动后的冗余调用。
相关文章:
- QTime 如何加/减时间 QT/C++
- 如何将QTime保存在SQL Server Express表中并读回?
- 如何将QTime 12转换为24 HR格式和Viceversa
- C++ / Qt QTime - 如何使用对象
- 为什么与两者相比,我得到的毫秒值不同(QTIme和QueryPerformanceCounter)
- QTime为新对象添加秒
- QTime->addSecs 导致分段错误
- 100% CPU 利用率在 gettimeofday、QTime 或 QLabel->setText
- 在QwtPlot中使用QTime作为X asis
- QTimeEdit:如何创建"QTime::setHMS(int, int, int, int)"的对象?
- 比较QTime和QTimer的值
- 如何将整型变量转换为QTime对象
- 在Qt中创建的GUI滞后(由QTime验证)