開放原碼架構設計:Glib 小談 (1)
来源:互联网 发布:吉首大学网络交费中心 编辑:程序博客网 时间:2024/06/04 18:46
jollen 發表於 May 25, 2007 10:31 AM
前言
就程式碼內部的組織來說,以往我們經常重新定義一些基本的東西,並透過這些 're-defidition' 的巨集或函數(亦稱為wrapperfunction)來撰寫程式。有時,也能透過重新定義的方式,將框架(framework)的實作隱藏起來。這種技巧,大量被應用在許多軟體專案中。
Glib 小談
Glib 是 GTK+ 計畫下的「副產品」,Glib 原本主要是給 GTK+ 與 GNOME 使用,不過,現在也有越來越多的應用程式開始使用 Glib 來開發軟體。Glib 就本質來看,他提供一套重新定義過的 data type、event loop 框架、thread 框架、以及物件(object)系統。
Glib 以一種「宏觀」的方式,提供 C 語言一套高度可攜性、簡單易學且通用的工具庫(toolkit)。由於 Glib 實在太優異了,除了 GTK+ 與 GNOME 本身外,也有非常多的 Free / Open Source Software 也開始採用 Glib 來開發軟體。
Glib 主要提供的內容,以及使用 Glib 來撰寫程式時需要具備的核心觀念,簡單說明如下。
Data Type
Glib 提供一組簡單易用且可攜性佳的 data type 定義。例如,我們想要擺放身高的資料,那麼傳統的 ANSI C 會以 unsigned int 來宣告變數;但是,改用 Glib 來做的話,就要改用 guint 這個由 glib 提供的 data type 來宣告變數。
以 guint 來說,Glib 的內部實作為:
typedef unsigned intguint;
雖然 Glib 仍以 ANSI C 的 data type 來定義 guint,但提供了高度可攜的 data type。
Event Loop
以前,如果您要規劃一套以事件驅動(event-driven)為主的應用程式框架(application framework),在 event loop 的設計上常會遭遇到許多困難;我想,對 Linux system programming 有經驗的朋友,也一定曾遇過「如何與硬體事件整合」的麻煩題目。
Event loop 的程式架構往往「長的很像」,所以我們以前常會思考,是否能寫出一套「萬用」的 event loop 框架;以後,只要是撰寫事件驅動程應用程式,就照著套用就好了!
Glib 把這個想法實現了。對於「core application」的支援,Glib 不僅提供一套宏觀且通用的 event loop 定義,連其他好用的技術也都一併定義完成了。
我們在規劃程式的核心架構時,經常使用的技術也都有包含在 Glib 的支援裡。除了 Event Loop 外,還包含:
- Threads
- Dynamic Loading of Modules,也就是 plug-ins 的功能。
- Memory Allocation
- IO Channels,也就是檔案、pipes 與 sockets 的功能。
- Message Output and Debugging Functions,常常用 printf() 在做除錯嗎?Glib 也定義了一組通用的介面!
- Message Logging
天啊!真是太好了,Glib 把以前常用的技術都「提出共通的部份」,讓我們更容易寫程式。
Threads
POSIX thread(亦稱為 pthread)是重要的 Linux user-space thread 函數庫,雖然 pthread並無法做到所謂的「效能提昇」,但是因為 application framework 規劃的需要,因此還是被大量採用。以往,有鑑於 thread的產生與管理經常都是「差不多」的程式碼,因此我也會定義一組屬於自己的 thread 通用 API,大部份都是以 macro形式來定義。Glib 也提供一組彈性相當好、高度可移植且容易使用的 thread 介面,透過 Glib 的定義來實作 multi-threaded application 不但簡單,而且也很容易管理所有的 thread。 《待續》
來源: www.jollen.org
- 開放原碼架構設計:Glib 小談 (1)
- glib 小case
- Glib 学习1
- Glib学习笔记(1)
- glib学习-1
- glib
- GLib
- Glib
- glib
- glib
- GLIB 常用数据结构介绍 1
- 技术积累-1( C技巧/GLib数据结构 )
- Glib实例学习(1)单链表
- glib中的哈希表学习(1)
- 'pkg-config --modversion glib-2.0' returned 2.34.1, but GLIB (2.32.3)
- glib安装 glib使用手册
- glib学习笔记-1 main event loop 1
- glib学习1-一个简单的例子与g_log
- 读《只要有1%的不同就可以100%吸引别人》
- 英文电影经典台词整理(原创)
- GObject对象系统
- 是时候了解下CMake了
- 什么是WEB服务器、应用服务器
- 開放原碼架構設計:Glib 小談 (1)
- Groovy Tip 31 Map拾遗
- CSDN
- sqlserver中全文检索与csw(测试版)实现分词查询测试
- SQL SERVER DBCC命令解释
- asp.net为控件动态添加事件
- 莫名其妙 错误 xfire web service
- 面向对象之自动绑定数据源
- C实现的动态字符串操作