我发现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) 感兴趣(特别是使用 SIGALRM
和 setitimer(2) ),但请务必阅读 signal-safety(7)
在其他操作系统上情况有所不同,您需要找出答案。
当然,详细信息也与硬件相关(了解 HPET 、 APIC timer 、 PIT )
SDL 是 free software并且有(像所有图形工具包一样)一些event loop (参见 SDL_WaitEventTimeout )大概在 poll(2) 左右或select(2)在 Linux 上,因此您可以深入了解实现。
关于c - 有没有比 SDL_Delay 更精确地延迟程序的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46350363/