gtk 多线程 问题
我的程序主程序中用g_timeout_add来定期更新UI,当有一个新任务的时候,创建一个新线程来处理,通讯获得的数据会自动修改, 定时更新UI的主线程会取出那些数据更新到UI上,但是我发现,我的程序在运行过程中(通讯线程没有完成所有工作之前)UI不会被更新,完成才更新.请问为什么,我是想显示进度的.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
标准做法是在下载线程用g_idle_add,加入UI更新到UI线程。
谢谢你的建议
或许你可以参考这种方式处理, 主线程调用poll 监视一个管道, 等待user event和其它线程的消息, 并处理UI. 其它线程通过发送消息改变UI
(这是我们一个嵌入式多线程项目的处理方法)
gtk_timeout_add 在main_loop里,已经没有问题了。谢谢你的回复。
这个负责更新,另外的线程负责操作数据。我在写一个LINUX版本的多线程下载工具。现在框架可以了,也可以下载了,等完成V1.0版本再发布。
给张图先:这是开发中的v0.1版本,中文名字叫做"快活“
[ 本帖最后由 napleon 于 2009-5-27 22:15 编辑 ]
g_timeout_add的回调函数不在GTK的主循环中,需要在该回调函数里面加上
gdk_threads_enter();
...
gdk_threads_leave();