Chinaunix

标题: gtk 多线程 问题 [打印本页]

作者: napleon    时间: 2009-05-22 21:32
标题: gtk 多线程 问题
我的程序主程序中用g_timeout_add来定期更新UI,当有一个新任务的时候,创建一个新线程来处理,通讯获得的数据会自动修改, 定时更新UI的主线程会取出那些数据更新到UI上,但是我发现,我的程序在运行过程中(通讯线程没有完成所有工作之前)UI不会被更新,完成才更新.请问为什么,我是想显示进度的.
作者: zhongfangqing    时间: 2009-05-26 17:40
g_timeout_add的回调函数不在GTK的主循环中,需要在该回调函数里面加上
gdk_threads_enter();
...
gdk_threads_leave();
作者: napleon    时间: 2009-05-27 22:12
gtk_timeout_add 在main_loop里,已经没有问题了。谢谢你的回复。
这个负责更新,另外的线程负责操作数据。我在写一个LINUX版本的多线程下载工具。现在框架可以了,也可以下载了,等完成V1.0版本再发布。
给张图先:这是开发中的v0.1版本,中文名字叫做"快活“


[ 本帖最后由 napleon 于 2009-5-27 22:15 编辑 ]
作者: 千江有月    时间: 2009-05-27 23:24
或许你可以参考这种方式处理, 主线程调用poll 监视一个管道, 等待user event和其它线程的消息, 并处理UI.  其它线程通过发送消息改变UI

(这是我们一个嵌入式多线程项目的处理方法)
作者: napleon    时间: 2009-05-28 19:16
谢谢你的建议
作者: fengshenx    时间: 2009-06-02 19:57
标准做法是在下载线程用g_idle_add,加入UI更新到UI线程。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2