我似乎找不到一个好的答案:
我正在制作一个游戏,我希望逻辑循环与图形循环分开。换句话说,我希望游戏每 X 毫秒执行一次循环,无论它显示多少帧/秒。
显然它们都会共享很多变量,所以我不能让线程/计时器来回传递一个变量...我基本上只是在寻找一种在后台有一个计时器的方法每 X 毫秒发送一个标志来执行逻辑循环,无论图形循环在哪里。
我愿意接受任何建议。似乎最好的选择是拥有 2 个线程,但我不确定在不不断同步大量数据的情况下,它们之间通信的最佳方式是什么。
最佳答案
你可以通过每次更新你的“世界观”来很好地实现多线程。所以它的工作原理如下:
- 您当前的世界 View 由单个智能指针指向,并且是只读的,因此不需要锁定。
- 您的逻辑创建您的(第一个)世界 View ,发布它并安排渲染器。
- 您的渲染器会获取指向您的世界 View 的指针的拷贝并进行渲染(记住,只读)
- 与此同时,您的逻辑会创造出一种新的、略有不同的世界观。
- 完成后,它将指针交换到当前世界 View ,并将其发布为当前世界 View 。
- 即使渲染器仍然忙于处理旧的世界 View ,也不需要锁定。
- 最终渲染器完成了(旧)世界的渲染。它捕获了新的世界观并开始了另一场奔跑。
- 与此同时,...(转到第 4 步)
您唯一需要的锁定是在您发布或获取指向世界的指针时。作为替代方案,您可以进行原子交换,但您必须确保使用可以做到这一点的智能指针。
关于C++ - 每 X 毫秒执行一次函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29835569/