我正在尝试在 wxPython 应用程序中运行物理模拟(使用 ODE)。我的第一次尝试使用计时器以 100Hz 的频率运行我的模拟,但实际上它以接近 60Hz 的频率运行。模拟的速率准确很重要,因此我编写了一个小线程,它会休眠 0.01 秒,然后(通过 wx.PostEvent)向运行(和渲染)模拟的主 UI 线程发送一条消息。
这完全挂起了应用程序,并且从日志记录中我可以看到并非我发送的所有事件(以 100Hz 频率)都在处理中。因此,我假设我正在填满消息队列并且我的 UI 停止运行。
当我将线程设置为以 50Hz 运行时,一切正常。但我的意思是,这是 2012 年,我有 8 个内核以荒谬的千兆赫或其他频率运行。在我看来,准确的 100Hz 似乎并没有要求那么多。从长远来看,它只需要准确,一些抖动(比如说 10%)就可以了。
有任何想法吗?顺便说一下,这是我的线程代码
def TimerThreadFunction(self):
while self.ContinueTimer:
time.sleep(0.01)
wx.PostEvent(self.frame, TickEvent())