0

我有一个(尽管可能有几个)wxTimer,它们附加到 wxFrame 中的 wxGLCanvas。计时器可以触发画布的重绘。

主要问题是删除——当框架关闭时,框架及其画布自然会死掉。似乎在计时器的绘制过程中,窗口关闭了。正在进行中的绘制方法现在正在对不再存在的对象进行操作,因此会出现问题。

问题只是有时会出现,这进一步支持了这一评估。在画布的析构函数(我是子类化)中,我在删除它之前调用 timer->Stop()。这似乎没有帮助-大概是因为可能刚刚发布了计时事件?

我的问题是如何防止这种情况发生。在销毁之前停止重复计时器事件的正确方法是什么?

4

2 回答 2

0

如果使用事件来处理计时器到期,这似乎很可疑,因为只有在没有更多事件待处理时才真正销毁框架,这是 wxWidgets 首先使用延迟销毁的主要原因之一。

如果您的意思是“我打电话Destroy()”但“我删除它”,我真的不知道这怎么会发生,并且一如既往,尝试在一个简单的示例中重现问题并将其提交到http:/ /trac.wxwidgets.org/。如果你delete frame直接这样做,那么不要这样做。

于 2012-09-14T22:28:45.750 回答
0

我的猜测是在计时器触发后但在绘图完成之前框架关闭。我建议:添加一个在计时器触发时设置的标志,并且仅在绘图完成时清除。帧关闭代码应该检查这个标志,并且只有在它明确时才继续。

于 2012-09-14T13:58:15.703 回答