我想在C++中实现一个简单的计时器机制.该代码应该适用于Windows和Linux.分辨率应尽可能精确(至少精确到毫秒).这将用于简单地跟踪时间的流逝,而不是实现任何类型的事件驱动设计.完成此任务的最佳工具是什么?
我是图形新手,所以我不知道人们通常如何控制渲染事物的帧速率.我的意思是,你如何设置应用程序以30fps渲染?可能有很多API提供这样的东西,但我需要从头开始编写代码.
操作系统:Windows 7
当将WinAPI Sleep()函数调用为Sleep(1)时,线程实际上会休眠15ms.我在循环中做了100次,总睡眠时间是1500毫秒而不是100毫秒.
这是常见的行为,还是我应该关注我的MOBO,CPU,Windows安装有什么问题?
编辑:如果可能的话,你可以运行这段代码并发布睡眠时间.我让我的一个朋友跑了这个,他实际上已经在1ms完成了所有这一切.
#include <iostream>
#include <ctime>
#include <Windows.h>
void test(void)
{
std::cout << "Testing 1ms sleep." << std::endl;
for (unsigned int i = 0; i < 10; i++)
{
std::clock_t startClocks = std::clock();
Sleep(1);
std::clock_t clocksTaken = std::clock() - startClocks;
std::cout << "Time: " << clocksTaken << "ms." << std::endl;
}
}
int main(void)
{
test();
std::cin.sync();
std::cin.get();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑2:似乎有些人获得1毫秒的原因是其他一些程序正在运行,将系统范围的计时器分辨率设置为1毫秒.默认情况下,Windows 7上的此值应为15.6毫秒.
我有一个程序,生成数据包发送到接收器.我需要一种有效的方法,在每个数据包的发送之间引入一个小延迟,以免超出接收器.我试过usleep()和nanosleep(),但它们似乎太慢了.我已经实现了一个繁忙的等待循环并取得了更大的成功,但我知道这不是最有效的方法.我对任何人尝试做我正在做的事情感兴趣.其他人是否发现usleep()和nanosleep()能够很好地适用于此类应用?
谢谢,
Danny Llewallyn