我試圖弄清楚如何讓GTK應用程序在一定時間後自動退出 。代碼不能從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);
}
而且,爲了完整起見,下面是main
,它連接信號處理程序並運行GTK應用程序:
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
(我認爲這裏也不是這種情況)。
我明顯在做東西錯了,爲什麼我的應用程序似乎沒有消息循環運行?
什麼h如果你調用['g_application_quit()'](https://developer.gnome.org/gio/unstable/GApplication。html#g-application-quit)而不是'gtk_main_quit()'在你原來的代碼中? – andlabs
@andlabs,一旦我將應用程序傳遞給回調函數,也可以工作。將更新答案。 – paxdiablo
那應該可以更清楚地記錄下來;你可以在官方的GNOME bugzilla上提出一個問題,建議文檔說如果你使用GtkApplication不要調用'gtk_main_quit()'... – andlabs