我想在C++中实现一个简单的计时器机制.该代码应该适用于Windows和Linux.分辨率应尽可能精确(至少精确到毫秒).这将用于简单地跟踪时间的流逝,而不是实现任何类型的事件驱动设计.完成此任务的最佳工具是什么?
我正在运行一个使用GCC和专有DSP交叉编译器的C程序来模拟一些功能.我使用以下代码来测量程序特定部分的执行时间:
clock_t start,end;
printf("DECODING DATA:\n");
start=clock();
conv3_dec(encoded, decoded,3*length,0);
end=clock();
duration = (double)(end - start) / CLOCKS_PER_SEC;
printf("DECODING TIME = %f\n",duration);
Run Code Online (Sandbox Code Playgroud)
这里conv3_dec()是我的程序定义的功能,我想找到这个函数的运行时间.
现在的问题是,当我的程序运行时,conv3_dec()函数运行了将近2个小时,但是输出结果printf("DECODING TIME = %f\n",duration)显示函数的执行仅在半秒钟内完成(DECODING TIME = 0.455443).这对我来说非常困惑.
我之前使用过该clock_t技术测量程序的运行时间,但差异从未如此之大.这是由交叉编译器引起的吗?正如旁注所示,模拟器模拟仅以500MHz运行的DSP处理器,因此DSP处理器和CPU的时钟速度差异导致错误正在测量CLOCKS_PER_SEC.
我研究了几个主题,以期获得有关如何使用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;
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我仍然需要摆脱特定于Windows的PAUSE功能,但是我认为可以通过一个简单的“ while(char!='\ n')”循环来解决。
我已经浏览过的内容:
(编辑:额外的研究,特别是对于C实现:
问题在于尚不清楚上述提到的某些方法(例如Boost或SDL2)在自动超频方面是否表现正常。
TL; DR:我应该使用什么跨平台功能在C / C ++中创建一个精确的,亚秒级的精确计数器,该计数器可以在多核和/或自动超频处理器上工作?
提前致谢。