【问题标题】:C++ Elapsed time is 0C ++经过时间为0
【发布时间】:2012-11-05 18:45:59
【问题描述】:

问题是我的程序太快了,它没有及时检测到变化,或者GetTickCount(),我怎样才能防止这种情况发生?

谢谢

【问题讨论】:

  • 如果花费不到一毫秒,您可以尝试更精确的方法。 QueryPerformanceCounter 将是一个好的开始,或者新的 <chrono> 标头。

标签: c++ performance winapi time rendering


【解决方案1】:

您是否将运行时间打印为整数?如果您要进行除法以获得经过的时间,请将分子或分母转换为浮点数。

【讨论】:

    【解决方案2】:

    x 运行需要多长时间并取平均值。

    此外,您可以使用分析来获得准确的时间。

    【讨论】:

      【解决方案3】:

      或者您可以尝试使用 rtdsc。 详情见这里:http://www.mcs.anl.gov/~kazutomo/rdtsc.html 片段:

      #include <stdio.h>
      #include "rdtsc.h"
      
      int main(int argc, char* argv[])
      {
        unsigned long long a,b;
      
        a = rdtsc();
        b = rdtsc();
      
        printf("%llu\n", b-a);
        return 0;
      }
      

      甚至 chrono 也不错,但它需要符合 C++11(部分)。 详情:std::chrono and cout

      【讨论】:

      • 坏主意 - 在多核 CPU 上。
      • 亲爱的朋友们,我知道这在多核 CPU 上是个坏主意,但它可以在指定的情况下找出经过的时间。
      【解决方案4】:

      使用

      void WINAPI GetSystemTimeAsFileTime(
        _Out_  LPFILETIME lpSystemTimeAsFileTime
      );
      

      相反。它有更好的分辨率。在大多数情况下,这确实是需要的。

      【讨论】:

        【解决方案5】:

        CodeProject 上有一个非常方便的类,它封装了QueryPerformanceCounter,我经常使用它:http://www.codeproject.com/Articles/475/The-CPerfTimer-timer-class

        【讨论】:

          【解决方案6】:

          GetTickCount 的精度为 5..15 毫秒,因此“零时差”是一个常见问题。

          如果您需要精确,请使用QueryPerformanceCounter

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-02-19
            • 1970-01-01
            • 1970-01-01
            • 2013-05-19
            • 1970-01-01
            • 1970-01-01
            • 2017-08-23
            相关资源
            最近更新 更多