gpt4 book ai didi

c - 如何从另一个线程调用 Gtk API?

转载 作者:行者123 更新时间:2023-11-30 14:37:02 25 4
gpt4 key购买 nike

我编写了一个 C 程序,其中实现了一些线程来进行轮询。当线程中发生某些事情时,我必须修改在 main 函数中创建的一些 Widget 。当线程尝试对Widget执行操作时,该程序有时会崩溃,例如简单地调用函数gtk_widget_hide,我发现这是因为我不能从另一个线程调用任何 GTK API。

在避免任何崩溃之前,我该如何执行我所描述的操作?考虑到我需要线程,这可能吗?

这是我的代码的功能示例

static GtkWidget* widget;

void check_user_action(){
while(!user_does_action){
g_sleep(1);
}

gtk_widget_hide(main_widget);
}

void main(){
widget = //I skip widget creation
gtk_widget_show_all(widget);

g_thread_new("check_user_action", check_user_action, NULL);

//do something else
}

这只是一个示例,但假设我必须 check_user_action 的唯一方法是使用轮询

最佳答案

对于您的代码片段,您可以将任务传递到主线程:

gboolean my_hide_func(gpointer user_data)
{
gtk_widget *widget = (gtk_widget*) user_data;
gtk_widget_hide(widget);
return FALSE;
}

void check_user_action(){
while(!user_does_action){
g_sleep(1);
}
g_idle_add(my_hide_func, main_widget);
}

这会将调用该函数的请求排队到运行 GTK 应用程序的主线程的队列中。

关于c - 如何从另一个线程调用 Gtk API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57658965/

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