【发布时间】:2015-07-30 19:53:59
【问题描述】:
关于QTime::currentTime() 的Qt 文档说:
请注意,准确性取决于底层证券的准确性 操作系统;并非所有系统都提供 1 毫秒的精度。
但是有什么方法可以在 Windows 7 中以毫秒精度获得这个时间?
【问题讨论】:
-
@Donald 是的类似的东西,但我现在阅读了这个问题和答案,实际上无法理解解决方案
关于QTime::currentTime() 的Qt 文档说:
请注意,准确性取决于底层证券的准确性 操作系统;并非所有系统都提供 1 毫秒的精度。
但是有什么方法可以在 Windows 7 中以毫秒精度获得这个时间?
【问题讨论】:
您可以使用QDateTime 类并将当前时间转换为适当的格式:
QDateTime::currentDateTime().toString("yyyy/MM/dd hh:mm:ss,zzz")
其中 'z' 对应于毫秒精度。
【讨论】:
您可以在 C/C++ 中使用 time.h 头文件提供的功能。
#include <time.h>
clock_t start, end;
double cpu_time_used;
int main()
{
start = clock();
/* Do the work. */
end = clock();
cpu_time_used = ((double)(end-start)/ CLOCKS_PER_SEC);
}
【讨论】:
计时器分辨率可能因平台而异,读数可能不准确。如果您需要在 Windows 7 上获得高分辨率、准确的时间戳,它提供了 QPC API:
https://msdn.microsoft.com/en-us/library/windows/desktop/dn553408%28v=vs.85%29.aspx
GetSystemTimePreciseAsFileTime 声称可以提供
但这只是关于准确的时间戳。如果您需要实际执行 1 毫秒延迟的操作(例如处理事件),则需要 RTOS,而不是台式机。
【讨论】:
一种常见的方法是将您正在做的事情放大并连续执行 10-100 次,这样您就可以通过将结果除以 10 获得更准确的时间读数-100。
但是获得毫秒级精确读数几乎没有用,因为您没有 100% 的 cpu 时间,这意味着如果操作系统提供另一个进程计算时间,您的读数将具有比 1 毫秒更大的差异在你做你的动作的时候。
【讨论】: