幾則GTK 開發技巧

2021-04-07 13:59:08 字數 1562 閱讀 2429

幾則

gtk+

開發技巧 l

使用gtk_idle_add

實現非同步

signal。

最近開發桌面模組時,遇到乙個棘手的問題:向

directfb

的視窗管理器註冊了頂層視窗改變的事件。當前頂層視窗切換時,視窗管理器**我設定的**函式,在**函式中又要呼叫視窗管理器的函式,以獲取頂層視窗的資訊。整個過程是同步呼叫的,即直接呼叫函式,這會重入乙個視窗管理器函式,造成死鎖。

後來通過

gtk_idle_add

把同步操作轉換成非同步操作,解決了這個問題。在

window

上,sendmessage

和postmessage

分別對應於同步和非同步訊息。而在

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 開發技巧

幾則gtk 開發技巧 作者 li xianjing 2006 12 19 這兩周在開發 s應用程式,這是第一次用gtk 開發完整的應用程式。在這個過程中,學到一些小技巧,感覺挺有用的,這裡做個筆記。1.使用g object set data儲存上下文資訊。在win32下,通過setwindowlon...

Hyper V使用技巧幾則

在主機上安裝windows server 2008 r2 hyper v server 2008 r2的時候,幾點注意事項 1 在cmos設定中,啟用虛擬化與dep的支援。2 將主機硬碟劃分為2個分割槽,其中第1分割槽大小為30 50gb,第2分割槽為硬碟剩餘空間,用來儲存虛擬機器。所有分割槽使用n...

幾則gdb使用技巧

分享一下我老師大神的人工智慧教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!幾則gdb 使用技巧 gdb的功能強大,與帶gui 的偵錯程式相比有過之而無不及,使用也就相對複雜一些。一方面是它的親和力稍差,畢竟是給程式設計師用的,不用做得傻瓜化。另外一方面它的命令太...