微吼云上線多路互動直播服務 加速多場景互動直播落地
683
2025-04-02
使用GtkApplication對象的實例:
#include
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
GtkApplication的出現是為了讓我們的核心程序代碼與main()函數分開。main()函數是由操作系統來調用的,屬于操作系統實現細節。
main()并不關心我們的程序能做什么的,有什么樣的行為。操作系統只知道要啟動應用程序,就調用它main()函數,僅此而已。而我們的程序對要做什么,要響應什么是很感興趣的,不關心操作系統調用main()函數的確切機制。
這樣的分離做法也顯得很合理了。
GTK+庫并沒有默認實現main函數,需要我們自己來實現。除了在main()函數里創建GtkApplication對象并運行它之外,盡量不要在main()函數里做過多的操作。真正的工作,通常在GtkApplication發出的信號中完成。GtkApplication運行時可能發出的信號:
startup: 當程序第一次啟動時,startup信號就會被觸發,可以對應用程序進行一些設置。
shutdown: 執行關閉任務,如保存文件到磁盤等
activate: 程序啟動時,顯示應用程序默認的第一個窗口,特別是在桌面環境下首次打開應用程序的情況。
open: 打開文件,并在新窗口顯示。使用應用程序從文件瀏覽器嘗試打開文檔的情況。
應用可以注冊除了默認的“activate”和“open“行為之外的行為。
GtkApplication對象默認是一個單例。程序啟動后的第一個實例,稱為主實例。遠程實例就是除主實例外的其他運行實例。本地實例就是當前實例。
當用戶償試打開第二個GtkApplication對象單例時,GtkApplication將發信號到主實例。主實例將再次收到activate或open信號。這種情況下,第二個實例將馬上退出,也不調用startup或shutdown。
現在,你應該明白為什么不要在main函數做太多操作的原因了吧。這樣可以避免第二個實例做無用功。所有啟動初始化都應用在startup中完成。可以調用g_application_hold()強制應用保持存活。
如果本地實例是主實例,那么函數調用GtkApplication實例產生的信號,會在本地中觸發。如果本地實例是一個遠程實例,那么函數調用產生的信號將被發送到主實例中,并在那里被觸發。例如,在主實例中,調用g_application_activate(),將在主實例中觸發“activate”信號;如果在遠程實例中調用它,則產生一個消息并發送到主實例,然后,在主實例將觸發“activate”。
《GtkApplication函數使用》
謝謝閱讀
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。