QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2008|回复: 7

请教GTK+窗口的手动刷新问题

[复制链接]
发表于 2005-12-9 00:08:05 | 显示全部楼层 |阅读模式
最近我编了一个用于搜索的小软件,使用GTK+库做图形界面,在运行时一些控件的显示存在问题,如图1,正确的显示应该形如图2,大概是由于后台程序太耗cpu的缘故吧,不过我想请教一下,是否可以手动强制刷新窗体,哪怕牺牲些运行速度,毕竟,这个窗体是用于程序运行进度的指示器。不然我就不写图形界面了。

先谢。   

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2005-12-9 00:16:13 | 显示全部楼层
图2,运行结束时正确显示的结果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

发表于 2005-12-9 00:22:57 | 显示全部楼层
把搜索和画界面分成两个线程,搜索文件的进程给画界面的进程发送开始搜索XXX文件的信号,画界面的线程负责走进度条。

另外,没有一个程序会在搜索的时候显示出文件名,文件清单默认都是隐藏的,搜索完成后用户可以选择查看详单。
回复

使用道具 举报

发表于 2005-12-9 09:40:18 | 显示全部楼层
gtk是非线程安全的,如果用多线程操作界面,每次都要gdk_threads_enter(),gdk_threads_leave(),像刷新进度条这种操作我觉得用gtk定时器(gtk_timeout_add())比较方便。

繁重的任务不要放在callback函数里,在callback返回前gtk不更新。
或者你可以试试gtk_main_iteration()
回复

使用道具 举报

 楼主| 发表于 2005-12-10 00:20:16 | 显示全部楼层
多谢两位大虾,小弟试试先。
回复

使用道具 举报

 楼主| 发表于 2005-12-12 22:55:37 | 显示全部楼层
感谢mandrakechina&mozilla,问题搞定。
在后台的循环之中,通过加入语句:
while(gtk_events_pending())
gtk_main_iteration();
让系统在繁忙的后台工作中不忘刷新一下前台的控件。
回复

使用道具 举报

发表于 2005-12-25 10:18:30 | 显示全部楼层
学习...
回复

使用道具 举报

发表于 2005-12-26 13:11:23 | 显示全部楼层
要是早看到mandrakechina&mozilla兄的方法,前几天我的一个程序就不会再用进程实现了。又学了一下,感谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-3 00:19 , Processed in 0.045851 second(s), 17 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表