加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – GTK中的重复窗口失效:几个步骤后失败

发布时间:2020-12-16 06:58:23 所属栏目:百科 来源:网络整理
导读:我有一个定时器,每秒调用一个方法(perform_step). perform_step进行一些计算并使我的窗口无效.这在最初很有效,但在少量迭代之后,窗口的on_expose_event不会被触发.从调试中我发现窗口失效方法已被调用,但未输入事件处理程序. 可能导致这种情况的任何想法?以
我有一个定时器,每秒调用一个方法(perform_step). perform_step进行一些计算并使我的窗口无效.这在最初很有效,但在少量迭代之后,窗口的on_expose_event不会被触发.从调试中我发现窗口失效方法已被调用,但未输入事件处理程序.

可能导致这种情况的任何想法?以下是我发现的一些可能有用的内容:

>当perform_step中的计算较短时,在较少的迭代之后事情会中断.
>事情在每次迭代次数相同后都会崩溃.
>将鼠标移到窗口上可以防止故障发生.如果我不断地将鼠标移到窗口上,事情就会永远存在.它似乎“重置”了柜台.如果在10次迭代之后事情会崩溃并且在第9次迭代时我将鼠标移到窗口上,那么事情就会在第19次迭代时分解.

这是一段代码:

bool SimDisplay::on_button_press_event(GdkEventButton* event) {
  Glib::signal_timeout().connect( sigc::mem_fun(*this,&SimDisplay::perform_step),1000 );
}

bool SimDisplay::perform_step() {
  world->step();
  //on the last iteration this is called but on_expose_event is never reached
  get_window()->invalidate(true);
}

bool SimDisplay::on_expose_event(GdkEventExpose* event) {
  ...
}

解决方法

你的on_button_press_event()缺少一个return语句;确保所有处理程序都返回正确的东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读