【发布时间】:2016-04-28 04:13:57
【问题描述】:
我正在尝试弄清楚如何让 GTK 应用程序在之后自动退出 一定的时间。
所以我有一个用于关闭应用程序的回调函数:
static gboolean killOffApp (gpointer userData) {
gtk_main_quit ();
return FALSE;
}
然后,在activate 信号处理程序中,我启动五秒计时器:
static void activate (GtkApplication* app, gpointer user_data) {
GtkWidget *window = gtk_application_window_new (app);
g_timeout_add_seconds (5, killOffApp, NULL);
gtk_widget_show_all (window);
}
并且,为了完整起见,这里是附加信号处理程序并运行 GTK 应用程序的 main:
int main (int argc, char **argv) {
GtkApplication *app = gtk_application_new ("com.example", G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
int status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}
我的问题是,当计时器触发时,对gtk_main_quit 的调用似乎无效,我不知道为什么:
(MyProg:776): Gtk-CRITICAL **: gtk_main_quit: assertion 'main_loops != NULL' failed
我在网上研究过这个问题,但只发现了以下任何一个问题:
- 它是从运行内部循环的部分代码完成的(例如在对话框中),因此它会关闭该内部循环而不是主循环(我相信这里不是这种情况);或
- 没有循环运行,例如,应用程序是使用一次性
gtk_main_iteration_do运行的(我认为这里也不是这种情况)。
我显然做错了某事,为什么我的应用程序似乎没有运行消息循环?
【问题讨论】: