c - 有没有比 SDL_Delay 更精确地延迟程序的方法?

标签 c sdl delay

我发现SDL_Delay并不完全精确。程序等待的时间可能比作为参数传递给函数的值多 1 或 2 毫秒。我读到这可能会发生,具体取决于所使用的操作系统。也许对于其他人来说差距更小或更大。

要制作每秒显示约 60 帧的程序,需要在每一帧之间调用 SDL_Delay,以便程序等待 17 毫秒 (1000/60 = 16.6666... ),或更少,具体取决于自上次调用 SDL_Delay 以来其他操作所花费的时间。然而,通过使用这个函数,每帧之间的时间会略有不同,有时17ms,有时18ms,有时19ms...我想知道是否有任何方法可以重现SDL_Delay的行为,但以更精确的方式,而不会出现该间隙带来的不便。

最佳答案

是的,有某种方法,但它变得特定于操作系统

Linux 上,阅读 time(7) , nanosleep(2) , poll(2) (或者可能是旧的 select(2) ), clock_gettime(2) , timer_create(2) (或者也许timerfd_create(2))

另请阅读Advanced Linux Programming (但是其中没有提到一些最近的 Linux 功能,因此另请参阅 intro(2)syscalls (2))。

也许您也可能对 signal(7) 感兴趣(特别是使用 SIGALRMsetitimer(2) ),但请务必阅读 signal-safety(7)

在其他操作系统上情况有所不同,您需要找出答案。

当然,详细信息也与硬件相关(了解 HPETAPIC timerPIT )

SDL 是 free software并且有(像所有图形工具包一样)一些event loop (参见 SDL_WaitEventTimeout )大概在 poll(2) 左右或select(2)在 Linux 上,因此您可以深入了解实现。

关于c - 有没有比 SDL_Delay 更精确地延迟程序的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46350363/

相关文章:

c++ - 你如何在 c 中交换结构数组的元素?

swift - 为什么我的弹出窗口延迟了(Swift)?

raspberry-pi - 树莓派程序延迟

java - 如何在花费几秒钟后忽略 if 语句

c - 读取系统调用错误(错误的文件描述符)

c - C 中的数据存储被多个文件使用

c - C 中的全局变量是否是静态的?

c++ - 计算游戏中的FPS

c++ - 奇怪的 SDL 键盘问题

c++ - SDL_Surface 的相对鼠标位置