我正在构建一个多线程应用程序,它将显示天气数据并在C语言中自动更新。我得到了要刷新的天气数据并将其加载到变量中。我在程序运行中途更改值时遇到问题。当我使用
gtk_label_set_text(GTK_LABEL(wsrc->text2), wsrc->deg);
我明白了
(out:7604): Gtk-CRITICAL **: gtk_label_set_text: assertion `GTK_IS_LABEL (label)' failed
我该怎么做。这个调用来自main的一个独立线程,该线程循环更新天气数据。
我是否使用信号来创建更新天气数据的触发器。寻求建议:)
最佳答案
不要从它的主线程period外部调用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指针的类型,但我相信你已经明白了。
关于c - 程序运行时如何在GTK中更改标签;来自单独的线程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19973720/