我想在C++中实现一个简单的计时器机制.该代码应该适用于Windows和Linux.分辨率应尽可能精确(至少精确到毫秒).这将用于简单地跟踪时间的流逝,而不是实现任何类型的事件驱动设计.完成此任务的最佳工具是什么?
我正在为我的游戏实施一个基本的(仅适用于小孩)反作弊.我在每个移动数据包中都包含了一个时间戳,并在服务器端对这些数据包之间的时间差进行了健全性检查.
我还包括一个数据包,它根据进程速度每5秒发送一次时间戳.但是,当PC滞后时,这似乎是一个问题.
那么我应该用什么来检查由于"速度黑客"而导致的处理时间是否更快?
我在客户端的当前循环速度检查:
this_time = clock();
time_counter += (double)(this_time - last_time);
last_time = this_time;
if (time_counter > (double)(5 * CLOCKS_PER_SEC))
{
time_counter -= (double)(5 * CLOCKS_PER_SEC);
milliseconds ms = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
uint64_t curtime = ms.count();
if (state == WALK) {
// send the CURTIME to server
}
}
// other game loop function
Run Code Online (Sandbox Code Playgroud)
如果客户端PC因RAM或CPU问题而没有延迟,则上面的代码可以正常工作.他们可能运行了太多的应用程序.
服务器端代码供参考:(GoLang)
// pktData[3:] packet containing the CURTIME from client
var speed = pickUint64(pktData, 3)
var speedDiff = speed - lastSpeed
if lastSpeed == 0 {
speedDiff …Run Code Online (Sandbox Code Playgroud) 我正在使用C++编写一个简单的游戏模拟程序,有一个名为update()的函数可以更新游戏的当前状态,它必须每1秒精确调用一次.如果我使用这样的循环:
while(//some condition) {
update();
Sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)
然后,每1秒钟不会调用该函数,而是每次调用(1 +执行update()).我阅读了各种解决方案,如异步函数,多线程,或使用std :: chrono计算函数的执行时间,并将其从1000ms参数减去sleep.其中一些对我的简单案例来说太复杂了,如果我不理解它们,其他一些似乎不安全.
有谁能告诉我什么是我的要求的合适解决方案?提前致谢.