`
jinghuainfo
  • 浏览: 1521159 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

几则GTK+开发技巧

 
阅读更多

几则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+2.0 中文版(基于GNOME官方文档翻译)

    GTK+ 2.0 教程 译者: huzheng,konghui,ferry,carton,yang_yi,ddd,tingle 版本号: V_0.1.0 2002年 6 月25 日 本文是有关通过 C 语言接口使用 GTK ...编写 GTK 应用程序的技巧 投稿 鸣谢 教程的版权和许可声明

    用GTK 开发Linux 嵌入式GUI 应用程序

    摘 要 随着数字信息技术和网络技术的发展,人们已经进入数码时代。建立在它们基础之 上的嵌入式系统已经广泛地渗透到科学...本文将讨论开发嵌入式GUI 的技巧和用GTK 工具开发Linux 嵌入式 GUI 应用程序的方法和步骤。

    LINUX C编程从初学到精通 张繁

    第三部分为实践篇,共有5章,分别为5个不同的Linux平台下C程序开发的综合案例,向读者详细阐述了Linux文件操作、GTK+图形界面编程、Linux网络编程,以及基于Linux平台的嵌入式软件开发的方法和技巧。

    Linux C编程从初学到精通 part1

    第三部分为实践篇,共有5章,分别为5个不同的Linux平台下C程序开发的综合案例,向读者详细阐述了Linux文件操作、GTK+图形界面编程、Linux网络编程,以及基于Linux平台的嵌入式软件开发的方法和技巧。 本书是由作者...

    Linux C编程从初学到精通 part3

    第三部分为实践篇,共有5章,分别为5个不同的Linux平台下C程序开发的综合案例,向读者详细阐述了Linux文件操作、GTK+图形界面编程、Linux网络编程,以及基于Linux平台的嵌入式软件开发的方法和技巧。 本书是由作者...

    Linux C编程从初学到精通 part2

    第三部分为实践篇,共有5章,分别为5个不同的Linux平台下C程序开发的综合案例,向读者详细阐述了Linux文件操作、GTK+图形界面编程、Linux网络编程,以及基于Linux平台的嵌入式软件开发的方法和技巧。 本书是由作者...

    jythonfx:使用Jython + JavaFX轻松开发应用程序的简单技巧

    JythonFX PL:信息呐TEMAT instalacji我教程PO polsku zajdziecie ENG:使用Jython + JavaFX开发应用程序的简单技巧。 样品: 简单的单按钮应用程序(HelloJyFx.py) 简单的FXML应用程序(FXMLSample.py,FXMLSample...

    Linux程序设计 第4版.haozip01

    16.2.4 安装gnome/gtk+开发库 551 16.3 事件、信号和回调函数 554 16.4 组装盒构件 556 16.5 gtk+构件 559 16.5.1 gtkwindow 559 16.5.2 gtkentry 560 16.5.3 gtkspinbutton 563 16.5.4 gtkbutton 565 16.5....

    Linux程序设计 第4版.haozip02

    16.2.4 安装gnome/gtk+开发库 551 16.3 事件、信号和回调函数 554 16.4 组装盒构件 556 16.5 gtk+构件 559 16.5.1 gtkwindow 559 16.5.2 gtkentry 560 16.5.3 gtkspinbutton 563 16.5.4 gtkbutton 565 16.5....

    gnome-commander:https:gitlab.gnome.orgGNOMEgnome-commander的只读镜像

    开发人员专用 您可以在文件中找到创建Gnome Commander的人员的电子邮件地址。 发行包 Gnome CommanderFedora,Gentoo,Arch等版中。 贡献 主意 如果您想在程序中看到一些不错的东西,应该在提交功能请求之前先检查...

    LINUX系统开发技术详解---基于ARM

    3.5 调试器GDB的使用技巧.............................................................................................. 60 3.5.1 GDB调试器介绍...............................................................

    飞鸽传书(IPMessenger) 源码

     开发多年的飞鸽,在他的基础上增加了些许功能,例如语音对话,这里继续讨论FreeEIM(飞鸽传书),前几天,详细的了解了FreeEIM(飞鸽传书)的网络协议,详细分析并且实现了FreeEIM(飞鸽传书)的消息传递过程,这里就...

Global site tag (gtag.js) - Google Analytics