为了测试我对 Gtk 其他位的理解,我想编写一个程序,该程序始终准备好一个事件供主循环使用。我写了这个简短的程序来尝试这样做:
#include <gtk/gtk.h>
static void toggle(GtkWidget *check, gpointer data)
{
gboolean checked;
g_object_get(check, "active", &checked, NULL);
g_object_set(check, "active", !checked, NULL);
}
int main(int argc, char *argv[])
{
GtkWidget *window, *check;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
check = gtk_check_button_new();
g_signal_connect(check, "toggled", G_CALLBACK(toggle), NULL);
gtk_container_add(GTK_CONTAINER(window), check);
gtk_widget_show_all(window);
gtk_main();
}
当我运行这个程序并单击复选框时,它会出现段错误。是什么赋予了?保持主循环忙碌的正确方法是什么?
(旁注:它在段错误之前可靠地切换了 2048 次——一个可疑的整数。)