wxTimer并发问题

时间:2012-09-13 23:46:42

标签: wxwidgets

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

主要问题是删除 - 当框架关闭时,框架及其画布自然会死亡。看来,当计时器的绘图正在发生时,窗口关闭。正在进行的draw-method现在正在一个不再存在的对象上运行,因此出现了问题。

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

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

2 个答案:

答案 0 :(得分:0)

我的猜测将是在计时器触发之后但在绘图完成之前帧关闭。我建议:添加一个在计时器触发时设置的标志,并且仅在绘图完成时清除。帧结束代码应检查此标志,并且仅在清除时才继续。

答案 1 :(得分:0)

如果事件被用于处理计时器到期,这似乎非常可疑,因为一旦没有更多事件待处理,框架应该只被真正销毁,这是wxWidgets首先使用延迟破坏的主要原因之一。

如果你的意思是“我打电话给Destroy()”但是“我删除它”,我真的不知道怎么会发生这种情况,并且一如既往地尝试以简单的方式重现问题会很有用示例并将其提交给http://trac.wxwidgets.org/。如果您直接delete frame,请不要这样做。