gtk 多线程 问题

发布于 2022-08-22 11:21:59 字数 151 浏览 10 评论 5

我的程序主程序中用g_timeout_add来定期更新UI,当有一个新任务的时候,创建一个新线程来处理,通讯获得的数据会自动修改, 定时更新UI的主线程会取出那些数据更新到UI上,但是我发现,我的程序在运行过程中(通讯线程没有完成所有工作之前)UI不会被更新,完成才更新.请问为什么,我是想显示进度的.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

摘星┃星的人 2022-08-26 15:50:51

标准做法是在下载线程用g_idle_add,加入UI更新到UI线程。

我还不会笑 2022-08-26 13:26:15

谢谢你的建议

甜是你 2022-08-26 09:51:58

或许你可以参考这种方式处理, 主线程调用poll 监视一个管道, 等待user event和其它线程的消息, 并处理UI.  其它线程通过发送消息改变UI

(这是我们一个嵌入式多线程项目的处理方法)

淡紫姑娘! 2022-08-26 06:12:50

gtk_timeout_add 在main_loop里,已经没有问题了。谢谢你的回复。
这个负责更新,另外的线程负责操作数据。我在写一个LINUX版本的多线程下载工具。现在框架可以了,也可以下载了,等完成V1.0版本再发布。
给张图先:这是开发中的v0.1版本,中文名字叫做"快活“

[ 本帖最后由 napleon 于 2009-5-27 22:15 编辑 ]

凡尘雨 2022-08-26 05:25:23

g_timeout_add的回调函数不在GTK的主循环中,需要在该回调函数里面加上
gdk_threads_enter();
...
gdk_threads_leave();

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文