如何在程序运行时更改GTK中的标签; 从一个单独的线程

我正在构build一个multithreading的应用程序,它将显示天气数据并自动更新C.我得到天气数据刷新并加载到variables。 我在中途修改程序时遇到了麻烦。 当我使用

gtk_label_set_text(GTK_LABEL(wsrc->text2), wsrc->deg); 

我明白了

 (out:7604): Gtk-CRITICAL **: gtk_label_set_text: assertion `GTK_IS_LABEL (label)' failed 

我该怎么做呢。 调用是从一个单独的线程,从主循环到更新天气数据。

我是否使用信号创build更新天气数据的触发器? 寻找build议:)

Solutions Collecting From Web of "如何在程序运行时更改GTK中的标签; 从一个单独的线程"

不要从主线程的外部调用GTK +方法。 我知道有解决办法,但99.99%的时间你真的不想这样做。

你应该做的是这样的:

 /* in your other thread do this: it will make sure update_text2 will be called in GTK+ main thread */ g_main_context_invoke (NULL, update_text2, wsrc); static gboolean update_text2 (gpointer userdata) { my_obj* wsrc = (my_obj*) userdata; gtk_label_set_text(GTK_LABEL(wsrc->text2), wsrc->deg); return G_SOURCE_REMOVE; } 

我没有测试这个代码,也不知道你的wsrc指针的类型,但我相信你会得到这个漂移。