几则GTK+开发技巧

原创 2006年06月16日 22:30:00

几则GTK+开发技巧

 

l         使用gtk_idle_add实现异步signal

 

最近开发桌面模块时,遇到一个棘手的问题:向DirectFB的窗口管理器注册了顶层窗口改变的事件。当前顶层窗口切换时,窗口管理器回调我设置的回调函数,在回调函数中又要调用窗口管理器的函数,以获取顶层窗口的信息。整个过程是同步调用的,即直接调用函数,这会重入一个窗口管理器函数,造成死锁。

 

后来通过gtk_idle_add把同步操作转换成异步操作,解决了这个问题。在Window上, SendMessagePostMessage分别对应于同步和异步消息。而在GTK+中,它所有的signal都是同步,要实现异步的signal,最简单的办法就使用gtk_idle_add

 

l         使用gtk_quit_add释放资源。

 

在开发桌面模块时,遇到另外一个问题:在注销时,退出桌面,这时要释放一些资源,包括关闭一些GtkWidget。这些操作是在退出gtk主循环后处理的,关闭GtkWidget时,总是会会死掉。看样子,在此之前,GtkWidget已经被非正常关闭了。所谓非正常,是说资源被销毁了,但destroy函数并没有被调用。

 

后来发现,在退出主循环时,所有的GUI资源都被释放掉了,DirectFB已经销毁,之后再访问GUI资源,后果无法预料。这样的操作只能在主循环之退出前调用,要做到这一点,可以通过gtk_quit_add增加了一个释放函数,在退出主循环之前被自动调用。一切OK了。

 

l         调试用libtool生成的可执行文件。

 

libtool产生的可执行文件,分为两层,外层是一个脚本文件,内层才是ELF文件。ELF文件放在.lib目录中,在linux下,以.开头的文件都是隐藏的,所以正常情况下看不到。一般都通过脚本文件运行,脚本文件会处理共享库相关的一些设置,比如设置库的路径等等。

 

不知道内幕的新手,往往尝试用gdb去调试脚本文件,面对莫名其妙的错误束手无策。即使知道.lib下的文件才是真正的可执行文件,去调试那个ELF文件仍然很麻烦,你必须要手工去设置库的路径。

 

其实不用那么麻烦,脚本文件最终不是要执行真正的ELF文件吗?用vim打开那个文件,我们发现它调用exec去执行真正的ELF文件,把exec换成gdb,然后再运行这个脚本文件,不用其它任何设置,自动进入调试器。当然,你可以把这个文件拷贝一份,一个用于正常执行,一个用于调试执行。

 

 

 

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

几则GTK+开发技巧

l         使用gtk_idle_add实现异步signal。   最近开发桌面模块时,遇到一个棘手的问题:向DirectFB的窗口管理器注册了顶层窗口改变的事件。当前顶层窗口切换时,窗口...
  • liberize
  • liberize
  • 2013年05月20日 13:35
  • 604

Fedora环境下Gtk+开发环境配置

1、安装必要组建:(在root权限下)yum install gtk2 gtk2-devel gtk2-devel-docs 2、可能还需要组建(可选,不行再装):yum install gnome...
  • changli_90
  • changli_90
  • 2013年05月06日 11:00
  • 2567

Gtk+ 教程和资源集合

注意:所有这些资料/教程都是使用c语言。 C Programming 2nd Edition 如果你需要学习C语言,这是一本经典的C语言教程。 [PDF] http://madison-...
  • darennet
  • darennet
  • 2015年01月04日 19:11
  • 1921

GTK+编程入门(1)—简介与glib库

GTK+编程入门(1)—简介与glib库(2015-7-23)分类:GTK+一:GTK+简介  GTK+是一个软件开发工具包,其设计目的是支持在 X Window系统下开发图形界面的应用程序。GNU所...
  • LazyBone1994
  • LazyBone1994
  • 2015年08月02日 12:50
  • 956

GTK+图形化应用程序开发学习笔记(十)—工具条

GTK+图形化应用程序开发学习笔记(十)—工具条 工具条(GtkToolbar)为用户提供常用命令的简便菜单。工具条通常包含带有表示命令的图标的按钮,但也能包含其他构件。工具条在软件中应用很...
  • yaoshenjie
  • yaoshenjie
  • 2015年11月07日 14:05
  • 842

GTK+图形化应用程序开发学习笔记(二)—Glib库

GTK+图形化应用程序开发学习笔记(二)—Glib库 在学习GTK+之前我们需要先学习一下 glib的有关知识。因为我们将会在以后的学习中遇到这些知识。由于本笔记不是专门介绍glib的,所以...
  • yaoshenjie
  • yaoshenjie
  • 2015年10月21日 10:01
  • 1011

Ubuntu下用glade和GTK+开发C语言界面程序(一)

前言:对于大学中计算机系的每年暑假的课设有太多想说的,能从中学到很多东西,当然不排除打酱油的,这些可以掠过哦,凡事都打酱油,人生也是打酱油的吧。2333。 对于大三以前的课设一般的要求都是用C写的,即...
  • u013599970
  • u013599970
  • 2014年08月30日 17:12
  • 4804

《GTK+/GNOME程序设计》 笔记(一) GTK+

GTK+简介GTK 最初为GIMP(一个图像处理软件,类似Photoshop)的工具包 后来GTK重写为面向对象的GTK+GTK+ 并非是用C++写的,而是用C语言,所谓的面向对象是用C语言模拟的。...
  • yjwx0018
  • yjwx0018
  • 2016年08月31日 23:07
  • 1505

GTK帮助文档的使用

学习图形界面开发,肯定离不开帮助文档的使用,因为它不像C语言那样就那么几个函数接口,图形接口的接口可以用海量来形容,常用的我们可能能记住,其它的真的没有必要去记,用到什么就去帮助文档查看用法。 ...
  • lianghe_work
  • lianghe_work
  • 2015年07月30日 16:40
  • 1044

GTK+ window环境的搭建

1) 下载 gtk+-bundle 包( 可以去官网下载:http://www.gtk.org/ -> Download -> Windows (32-bit) and 64-bit -> All...
  • tennysonsky
  • tennysonsky
  • 2015年01月14日 11:35
  • 1829
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:几则GTK+开发技巧
举报原因:
原因补充:

(最多只允许输入30个字)