GTK+ 2.0 教學-深入探索信號處理函式

讓我們來看一下函式 _signal_connect() 的宣告。

gulong g_signal_connect( gpointer object, const gchar *name, GCallback func, gpointer func_data );

注意到傳回值的型別 gulong 了嗎?這是一個識別你的回呼函式的標籤。前面講過,每個信號和每個物件可以有多個回呼函式,並且它們會按設置的順序依次運行。

利用這個標籤,你可以用下面的函式從列表中刪除這個回呼:

void g_signal_handler_disconnect( gpointer object, gulong id );

所以,通過傳遞你想在上面刪除處理函式的元件,以及某個 signal_connect 函式傳回的標籤,你就可以中斷一個信號處理函式的連接。

你也可以用 g_signal_handler_block() 和 g_signal_handler_unblock() 這類函式來暫時斷開信號處理函式的連接。

void g_signal_handler_block( gpointer object, gulong id );
void g_signal_handlers_block_by_func( gpointer object, GCallback func, gpointer data );
void g_signal_handler_unblock( gpointer object, gulong id );
void g_signal_handlers_unblock_by_func( gpointer object, GCallback func, gpointer data );
Print Friendly, PDF & Email

1 則留言


發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料