概述
最近在编写一个gtk的多线程程序,在一个线程中需要弹出一个对话框(gtk_message_dialog),结果就Segment fault了,而且还会报在src/xcb_io.c有 process_responses,查了一下,果然是说 X isn't tread-safe,所以需要用 g_idle_add()来更新界面,使用后程序正常了。
简单来说就是这样:
gboolean dialog_example(gpointer data)
{
......;
return FALSE;
}
......;
gtk_add_idle(refresh_ui, data);
程序里的例子:
gboolean create_message_dialog(gchar* message)
{
GtkWidget* dialog_box;
dialog_box = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, message);
gtk_dialog_run(GTK_DIALOG(dialog_box));
gtk_widget_destroy(dialog_box);
return FALSE;
}
.......;
g_idle_add(create_message_dialog, "data example");
最后
以上就是爱笑玉米为你收集整理的gtk在多线程中的界面问题的全部内容,希望文章能够帮你解决gtk在多线程中的界面问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复