相关疑难解决方法(0)

C++跨平台高分辨率计时器

我想在C++中实现一个简单的计时器机制.该代码应该适用于Windows和Linux.分辨率应尽可能精确(至少精确到毫秒).这将用于简单地跟踪时间的流逝,而不是实现任何类型的事件驱动设计.完成此任务的最佳工具是什么?

c++ cross-platform timer

69
推荐指数
6
解决办法
7万
查看次数

根据处理速度每x秒循环一次

我正在为我的游戏实施一个基本的(仅适用于小孩)反作弊.我在每个移动数据包中都包含了一个时间戳,并在服务器端对这些数据包之间的时间差进行了健全性检查.

我还包括一个数据包,它根据进程速度每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++ performance loops infinite-loop

6
推荐指数
1
解决办法
390
查看次数

每1秒调用一次功能(精确地)

我正在使用C++编写一个简单的游戏模拟程序,有一个名为update()的函数可以更新游戏的当前状态,它必须每1秒精确调用一次.如果我使用这样的循环:

while(//some condition) {
     update();
     Sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)

然后,每1秒钟不会调用该函数,而是每次调用(1 +执行update()).我阅读了各种解决方案,如异步函数,多线程,或使用std :: chrono计算函数的执行时间,并将其从1000ms参数减去sleep.其中一些对我的简单案例来说太复杂了,如果我不理解它们,其他一些似乎不安全.

有谁能告诉我什么是我的要求的合适解决方案?提前致谢.

c++ multithreading sleep asynchronous delay

2
推荐指数
1
解决办法
853
查看次数