gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:22:03 27 4
gpt4 key购买 nike

我正在构建一个多线程应用程序,它将显示天气数据并在 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 不同的线程,该线程循环更新天气数据。

我是否使用信号来创建触发器来更新天气数据。寻求建议:)

最佳答案

不要从主线程之外调用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com