顯示具有 [程式設計]glib 標籤的文章。 顯示所有文章
顯示具有 [程式設計]glib 標籤的文章。 顯示所有文章

2023年1月8日 星期日

Gobject類對象

文章目錄

  • 1、Gobject類定義
  • 2、向Gobject系統註冊類
  • 3、類的構造函數
  • 4、父子類的繼承關係
  • 5、類的析構函數
  • 6、類的其他設置

1、Gobject類定義

Gstreamer框架是基於插件的,同時插件是可以動態的註冊、創建,gstreamer基於Gobject開發,下面來了解一下gstreamer是如何通過Gobject完成自定義類的註冊。

2021年11月28日 星期日

glib基礎

 GUI應用程序都是事件驅動的。這些事件大部分都來自於用戶,比如鍵盤事件、鼠標事件或筆點事件。還有一些事件來自於系統內部,比如定時事件、socket事件和其它文件事件等等。在沒有任何事件的情況下,應用程序處於睡眠狀態。


因為這種事件驅動機制,GUI應用程序都毫無例外的需要一個主循環(main loop)。主循環(main loop)控制應用程序什麼時候進入睡眠狀態,什麼時候被喚醒。主循環實現得好,應用程序才能工作正常又省電。

2021年3月21日 星期日

glib tree example

編譯:gcc -g -Wall -O0 fuck.c -o fuck `pkg-config --libs --cflags glib-2.0`

1.树的基本操作


这里是在树中可以执行的一些基本操作:

#include <glib.h>
#include
<stdio.h>

int main(int argc, char** argv) {
GTree
* t = g_tree_new((GCompareFunc)g_ascii_strcasecmp);
g_tree_insert(t,
"c", "Chicago");
printf(
"The tree height is %d because there's only one node\n", g_tree_height(t));
g_tree_insert(t,
"b", "Boston");
g_tree_insert(t,
"d", "Detroit");
printf(
"Height is %d since c is root; b and d are children\n", g_tree_height(t));
printf(
"There are %d nodes in the tree\n", g_tree_nnodes(t));
g_tree_remove(t,
"d");
printf(
"After remove(), there are %d nodes in the tree\n", g_tree_nnodes(t));
g_tree_destroy(t);
return 0;
}

***** Output *****

The tree height is 1 because there's only one node
Height is 2 since c is root; b and d are children
There are 3 nodes in the tree
After remove(), there are 2 nodes in the tree

2021年1月31日 星期日

GObject信號機制

GObject參考手冊的“概念/信號”中最關鍵的一句話是:每一個信號在註冊的時候都要與某種數據類型(包括GObject庫中的內建型或GObject子類類型)存在關聯,這種數據類型的用戶需要實現信號與閉包的連接,這樣在信號被發射時,閉包會被調用。這句話,意味著我們要使用GObject信號機制,那麼就必須必須完成兩個步驟:第一個步驟是信號註冊,主要解決信號與數據類型的關聯問題;第二個步驟是信號連接,主要處理信號與閉包的連接問題。考察信號註冊的大致過程。

信號可以與GObject庫的類型管理機制中“可實例化”的數據類型進行關聯,但是GObject參考手冊建議我們最好是只在GObject子類類型中使用信號,因為信號跟類/對像在邏輯上比較相符。

2021年1月25日 星期一

glib函式庫 GHashTable 介紹及簡單範例應用

從前在程式碼流看到雜湊hash這個東西總感覺這什麼鬼啊!搞這麼複雜幹嘛...後來才發現這東西太好用了,以往在coding的時候,時常會遇到一個管理序號的隨機問題,新增一個成員要給序號1,下一個成員給序號2,以此類推,但是當情況變成在某情況下的某個成員會被刪除,那它的序號就空出來了,這時就要把這空出來的序號留給下一個加入的成員使用,否則序號會遞增個沒完沒了。在當時會自己寫程式去管理這個序號,接著呢~當整個程式愈來愈大,愈來愈複雜,用到序號的地方愈多,參與開發的人愈多,沒搞懂整體架構就開始解bug的人愈來愈多,bug就愈來愈多,如果一 開始就使用hash table來管理這些序號的對應,不僅省時省力,程式碼也會簡潔一點,相對的bug就可以減少一些。以下是網上看來的介紹,相當簡單易用也易懂的一個範例。

補充說明:

除了下面的範例,其實真正使用上不是這麼單純,範例中不管是key還是value都是用常數

2021年1月21日 星期四

[暫存]glib學習記錄

g_source_remove

g_io_add_watch返回事件源ID,之後可以以該事件源ID用g_source_remove再次動態刪除監視。每個FD使用一個事件源,而不是修改現有的監視,而是刪除舊的監視並創建適當新的監視。

g_idle_add

函數功能:

增加一個空閒任務,讓應用程序在空閒時執行指定的函數。

  

  1. 在空閒時執行低優先級任務。有的任務優先級比較低,但費耗時間比較長,像屏幕刷新等操作,我們不希望它阻礙當前操作太久,此時可以把它放到空閒任務裡去做。實際上GTK+裡面也是這樣做的,這樣可以獲得更好的響應性。