免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4875 | 回复: 5

gtk 多线程 问题 [复制链接]

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

论坛徽章:
0
发表于 2009-05-26 17:40 |显示全部楼层
g_timeout_add的回调函数不在GTK的主循环中,需要在该回调函数里面加上
gdk_threads_enter();
...
gdk_threads_leave();

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


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

论坛徽章:
0
发表于 2009-05-27 23:24 |显示全部楼层
或许你可以参考这种方式处理, 主线程调用poll 监视一个管道, 等待user event和其它线程的消息, 并处理UI.  其它线程通过发送消息改变UI

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

论坛徽章:
0
发表于 2009-05-28 19:16 |显示全部楼层
谢谢你的建议

论坛徽章:
0
发表于 2009-06-02 19:57 |显示全部楼层
标准做法是在下载线程用g_idle_add,加入UI更新到UI线程。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP