有两个线程。一个是事件线程,另一个负责渲染。渲染线程使用事件线程中的变量。有互斥锁,但它们是无关紧要的,因为我注意到即使我完全删除它们(用于测试),行为也是相同的。
如果我单独在渲染线程中执行 sleep() 10 毫秒,FPS 通常为 100。
如果我在渲染线程中根本不 sleep 并且在事件线程中 sleep ,则渲染线程根本不会减慢。
但是,如果我在渲染线程中休眠 10 毫秒,在事件线程中休眠 10 毫秒,则 FPS 不是 100,而是更低,约为 84! (请注意,即使完全删除互斥锁,它也是一样的)
(如果他们都没有 sleep ,它通常会变高。)
什么会导致这种行为?
--
使用的 sleep 命令是windows的Sleep()或SDL_Delay()(在windows上可能最终是Sleep())。
最佳答案
我相信我已经找到了答案(自己的答案)。
sleep 不能保证等待一段时间,但由于操作系统调度,它会至少等待一段时间。
更好的方法是显式计算实际传递的时间(并且仅当已经过了特定时间时才允许通过该时间执行)。
关于c - 当两个线程同时休眠时,什么会产生这种奇怪的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4787051/