我写了一个小的gtk程序,但我没有使用gtk_main()
。相反,只要有服务事件然后运行我自己的更新功能,我就会运行gtk_main_iteration()
,如下所示:
while (active) {
while ( gtk_events_pending() ) gtk_main_iteration();
update();
}
由于没有gtk_main()
,gtk_main_quit()
将毫无用处。
g_signal_connect(window,"destroy",G_CALLBACK(gtk_main_quit),NULL);
那么当我注册销毁信号时该怎么办?
如果我没有处理销毁信号,我的代码会尝试继续,但是因为gtk层次结构不再存在而失败,但是gtk的某些部分仍然存在,会引发同样的异常7次:
GLib-GObject-CRITICAL **: g_signal_handler_disconnect: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
我可以调用自己的G_CALLBACK函数,只需调用exit()
,然后就不会发生异常,但这并没有让我有机会干净地处理应用程序关闭。