【问题标题】:Getting milliseconds accuracy current time in Qt在 Qt 中获取毫秒精度的当前时间
【发布时间】:2015-07-30 19:53:59
【问题描述】:

关于QTime::currentTime() 的Qt 文档说:

请注意,准确性取决于底层证券的准确性 操作系统;并非所有系统都提供 1 毫秒的精度。

但是有什么方法可以在 Windows 7 中以毫秒精度获得这个时间?

【问题讨论】:

标签: c++ qt qtime


【解决方案1】:

您可以使用QDateTime 类并将当前时间转换为适当的格式:

QDateTime::currentDateTime().toString("yyyy/MM/dd hh:mm:ss,zzz")

其中 'z' 对应于毫秒精度。

【讨论】:

    【解决方案2】:

    您可以在 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);
    }
    

    【讨论】:

    • 哦……没关系。我以为你在 C/C++ 中寻找这个。
    【解决方案3】:

    计时器分辨率可能因平台而异,读数可能不准确。如果您需要在 Windows 7 上获得高分辨率、准确的时间戳,它提供了 QPC API:

    https://msdn.microsoft.com/en-us/library/windows/desktop/dn553408%28v=vs.85%29.aspx

    GetSystemTimePreciseAsFileTime 声称可以提供

    但这只是关于准确的时间戳。如果您需要实际执行 1 毫秒延迟的操作(例如处理事件),则需要 RTOS,而不是台式机。

    【讨论】:

      【解决方案4】:

      一种常见的方法是将您正在做的事情放大并连续执行 10-100 次,这样您就可以通过将结果除以 10 获得更准确的时间读数-100。

      但是获得毫秒级精确读数几乎没有用,因为您没有 100% 的 cpu 时间,这意味着如果操作系统提供另一个进程计算时间,您的读数将具有比 1 毫秒更大的差异在你做你的动作的时候。

      【讨论】:

      • 感谢您的回复,但这不是同步操作,我需要计算我的数据之间的 1 毫秒精度,我认为毫秒时间精度不需要 100% 的 CPU 时间。一定有办法的。
      • @ATN 请记住,数据到达与您的进程被通知其到达之间的延迟将是随机的,在糟糕的情况下可能会达到数百毫秒的数量级。无论您获得什么时序数据,都必须使用适当的错误模型进行统计处理。
      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 2014-10-21
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多