设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: guoxiaomi
打印 上一主题 下一主题

[讨论] 设计一个简单的游戏引擎

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2309
在线时间
123 小时
注册时间
2017-2-26
帖子
36
1
发表于 2022-8-16 23:45:22 | 显示全部楼层
xp的好时代,来临力

评分

参与人数 1+1 收起 理由
guoxiaomi + 1 我很赞同

查看全部评分

RM水友群号   917854767  欢迎加入
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2309
在线时间
123 小时
注册时间
2017-2-26
帖子
36
2
发表于 2023-2-28 23:39:36 | 显示全部楼层
控帧改为等待信号实现

写了个demo,验证windows下的WaitableTimer和STL sleep_for,结果令人很意外很失望。

源码:
  1. #include <Windows.h>
  2. #include <stdio.h>
  3. #include <thread>
  4. #include "SDL.h"

  5. int main(int argc, char* argv[])
  6. {
  7.     uint64_t frequency = SDL_GetPerformanceFrequency();
  8. #if 1
  9.     HANDLE waitable_timer = CreateWaitableTimerW(
  10.         nullptr,
  11.         TRUE,
  12.         nullptr);
  13.     while (waitable_timer)
  14.     {
  15.         uint64_t before = SDL_GetPerformanceCounter();

  16.         LARGE_INTEGER delay;
  17.         delay.QuadPart = -1E7 / 60;
  18.         SetWaitableTimer(
  19.             waitable_timer,
  20.             &delay,
  21.             0, nullptr, nullptr, FALSE
  22.         );
  23.         WaitForSingleObject(waitable_timer, INFINITE);

  24.         uint64_t after = SDL_GetPerformanceCounter();
  25.         printf("call: %lld, real: %llu, error: %lld\n", -delay.QuadPart, after - before, llround(0.L + after - before + delay.QuadPart));
  26.     }
  27. #else
  28.     while (true)
  29.     {
  30.         uint64_t before = SDL_GetPerformanceCounter();

  31.         long long delay = 1E7 / 60;
  32.         std::this_thread::sleep_for(std::chrono::nanoseconds(delay * 100));

  33.         uint64_t after = SDL_GetPerformanceCounter();
  34.         printf("call: %lld, real: %llu, error: %lld\n", delay, after - before, llround(0.L + after - before - delay));
  35.     }
  36. #endif
  37.     return 0;
  38. }
复制代码


运行结果:
WaitableTimer



STL sleep_for



结论:
WaitableTimer的精度实际上和STL sleep_for一样,都是15ms左右(具体数字取决于操作系统的调度时间片)的粒度。

P.S.:github不好发图,就借楼发了

评分

参与人数 1+1 收起 理由
guoxiaomi + 1 我很赞同

查看全部评分

RM水友群号   917854767  欢迎加入
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-6-16 05:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表