我正在构建一个多线程应用程序,它将显示天气数据并在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的单独线程,循环以更新天气数据。
我是否使用信号创建触发器以更新天气数据。寻求建议:)
答案 0 :(得分:2)
不要从它的主线程,句点之外调用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指针的类型,但我确信你会得到漂移。