моего .h файлапочему я получаю различное значение миллисекунды в сравнении с обеими (QTime & QueryPerformanceCounter)
#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
\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
мой каст файл
#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;
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\
m у основной файл
#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 ;
}
мой выход, как этот
Start timeQTime ("17:57:46") милли секунд счетчик: 1,20633 времени differnce в микро счетчиком: время 1206 differnce в милли с помощью QTime: 0 времени окончания QTime («17:57:46»)
здесь, рассматривая выходные микросекунд являются 1206 счетчиком, это будет означать почти 1 миллисекунду, но в выходных миллисекундах 0 по QTime , так как я могу получить одинаковые отличия се в милли & микросекунд
на самом деле я хочу знать, почему differece вовремя приходит между QTime и счетчиком
Вы имеете дело с целыми числами. 'freq.QuadPart/1000000' отбросит точность, которую вы, вероятно, захотите сохранить. Потенциально это то же самое с другим подразделением. Я не знаю, правильна ли формула, но следующее было бы безопаснее, если бы она не переполняла числитель: '(1000000 * (ntime2.QuadPart-ntime1.QuadPart))/freq.QuadPart;' –
Если вы могут полагаться на окна 8 или более поздние, тогда есть встроенная функциональность для объединения реального времени с QPC под названием [GetSystemTimePreciseAsFileTime] (https://msdn.microsoft.com/en-us/library/windows/desktop/hh706895 (v = vs.85) .aspx)). Это дает точность с шагом в 0,1 микросекунды, что лучше всего подходит для Windows. Как всегда с точным временем в окнах, [это] (https://msdn.microsoft.com/en-us/library/windows/desktop/dn553408 (v = vs.85) .aspx) является обязательным для чтения. –
В соответствии с документами '' QTime :: msecsTo() '] (http://doc.qt.io/qt-5/qtime.html#msecsTo): 1) он возвращает ** подписанный **' int' ; 2) он «может вернуть 0, если какое-либо время недействительно» (может быть проверено с помощью 'QTime :: isValid()') –