免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6358 | 回复: 4
打印 上一主题 下一主题

困扰了我很久了,关于GTK窗口隐藏、显示、隐藏再显示的!大家帮看看! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-13 22:14 |只看该作者 |倒序浏览
一个应用程序要求是这样的:如果从串口收到某一个特定消息,则显示GTK窗口;收到某个特定消息后,隐藏GTk窗口。
我尝试了一些方法,但是都不理想。有一个是第一次显示、隐藏没有问题;第二次再显示,必须按一下键盘,才能显示出来窗口?不明白。另外一个使用了while(1)gtk_main_iteration_do(FALSE);不过这样的话,CPU占用率就一直是100%了。

估计,我还是没有找到正解,不知道大家有没有更好的建议,多谢帮忙!!!!

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2015-11-16 06:20:00
2 [报告]
发表于 2006-11-14 09:10 |只看该作者

第二次再显示,必须按一下键盘,才能显示出来窗口

建议你第二次要重新刷新一下窗口。

论坛徽章:
0
3 [报告]
发表于 2006-11-14 10:07 |只看该作者

楼上的:您的意思是需要将GTK窗口重新初始化吗?

我刚刚接触GTK,新手!
您的意思是需要将GTK窗口重新初始化吗?

一般像这样的应用 GTK窗口如何处理呢?是要在主进程里控制窗口,还是建立单独的线程来控制窗口?

我想过一种方法是使用线程初始化窗口 显示窗口 然后 进入gtk_main();在另一个线程中 show hide.
不过,运行的时候 好像有gtk的异步错误!

Xlib: unexpected async reply (sequence 0xfb)!

[ 本帖最后由 tanat 于 2006-11-14 10:23 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-11-14 20:05 |只看该作者
强制绘制:
#include <gdk/gdkx.h>
XFlush(GDK_WINDOW_XDISPLAY(gdk_widget_get_root_window(window)));

关于异步错误:
对GTK界面的绘制最好在一个线程中,否则,应该做以下处理
int main(int argc,char **argv)
{
...
g_thread_init(NULL);
gdk_threads_init();

gtk_set_locale();
gtk_init(&argc,&argv);

...
pthread_create(...Thread...);//比如这是你的线程
...
create_window();//主线程中绘制
...

gdk_threads_enter();
gtk_main();
gdk_threads_leave();
}

void * Thread(void * param) //这是你的线程
{
gdk_threads_enter();//开始时候要enter
...
//尽情绘制界面吧
...
gdk_threads_leave();//结束时候当然要leave
pthread_exit();
}

论坛徽章:
0
5 [报告]
发表于 2006-11-14 20:42 |只看该作者
呵呵,多谢楼上的,真是高手!
我也查了一些资料,果然是线程安全方面的问题,真是谢谢了!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP