准确的C / C + +时钟在一个多

我研究了几个主题,试图获得关于如何使用C或C ++制作可靠时钟的一些想法。 不过,我也看到一些函数使用处理器的刻度和每秒钟的刻度来计算最终结果,我认为这可能是一个像我拥有的​​自动超频的CPU问题。 我也看到其中一个在一段时间后重置,因此不是真的可靠。

我们的想法是制作一个(最好是跨平台的)时钟,就像游戏中的时钟一样,其精度优于一秒钟,以便能够在“当前会话”中添加已用时间并在最后保存时间的程序。 这将是计算在没有游戏内时钟的游戏机游戏上花费的时间,并且从长远来看可能将其整合到实际的PC游戏中。

它应该能够在不占用太多或所有CPU时间的情况下运行(或者单核用于多核CPU的时间),因为仅仅为时钟使用所有这些资源并且在具有自动 - 超频(否则可能导致不准确的结果)。

我想在当前实现这个功能的程序看起来像这样,但我可能会用C语言重新编写它(因为我必须回到学习如何使用C ++编写代码):

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    cout << "In game" << endl;
    system("PAUSE");
    return 0;
}

在附注中,我仍然需要摆脱特定于Windows的PAUSE功能,但我认为可以通过一个简单的“while(char!=' n')”循环来处理这个问题。

我已经浏览了一下:

  • 使用clock()来测量执行时间
  • 以毫秒为单位计算C程序中的耗用时间
  • C编程语言的时间戳
  • C程序的执行时间
  • C:使用clock()来测量多线程程序中的时间
  • gettimeofday()保证具有微秒的分辨率吗?
  • 如何使用ANSI C测量以毫秒为单位的时间?
  • C ++跨平台高分辨率定时器
  • 定时器功能使用C ++提供纳秒级的时间
  • 如何衡量CPU时间和挂钟时间?
  • 如何在Linux / Windows上测量CPU时间和挂钟时间?
  • 如何测量时间?
  • std :: chrono :: high_resolution_clock的分辨率不符合测量结果
  • C ++如何在Linux中使定时器准确
  • http://gameprogrammingpatterns.com/game-loop.html
  • 时钟()精度
  • std :: chrono似乎没有提供准确的时钟分辨率/频率
  • 使用线程的C ++中的时钟函数
  • (编辑:额外的研究,特别是对于C实现:

  • 跨平台C ++高精度事件计时器实现(没有真正的答案)
  • 在C代码中计算函数时间(纳秒)(Windows)
  • 如何在毫秒和纳秒的精度上打印时间差? (可能是C实现的最佳答案)
  • 如何获得持续时间,如int milli和从<chrono>浮动秒数? (再次C ++))
  • 问题在于,不清楚某些提到的方法,如Boost或SDL2,是否适用于自动超频。

    TL; DR :我应该使用哪种跨平台功能来制作精确的C / C ++精准计数器,这些计数器可以在多核和/或自动超频处理器上工作?

    提前致谢。


    std::chrono::high_resolution_clock似乎是你正在寻找的东西。 在大多数现代CPU中,它将会是稳定的单调增加的时钟,不会受到CPU超频的影响。

    请记住,它不能用于说明时间。 只是告诉时间间隔,这是一个很大的区别。 例如:

    using clock = std::chrono::high_resolution_clock;
    auto start = clock::now();
    perform_operation();
    auto end = clock::now();
    auto us = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
    std::cout << "Operation took " << us << " microseconds.n";
    

    如果时钟检测本身是一个性能敏感的操作,那么您将不得不求助于特定于平台的技巧,其中最受欢迎的技术是直接读取CPU tick计数器(英特尔系列中的RDTSC )。 这非常快速,而且在现代CPU上测量时间间隔的方法非常准确。

    链接地址: http://www.djcxy.com/p/85719.html

    上一篇: Accurate C/C++ clock on a multi

    下一篇: Having constructor makes slower calculation