QT核心編程之會話管理 (6)
QT核心編程之會話管理是本節介紹的內容,QT核心編程我們要分幾個部分來介紹,想參考更多內容,請看末尾的編輯推薦進行詳細閱讀,先來看本篇內容。
一個會話是一組正在運行的應用程序,它們每個都一個特殊的狀態。會話被一個稱為會話管理器(Session manager)的服務程序來控制。在會話里每個參與的應用程序被稱為會話客戶。會話管理器為用戶發出命令給它的客戶。這些命令會使客戶提交沒有保存的變化(如:保存打開的文件),使客戶為將來的會話保存狀態或關機。這樣的一些操作被稱為會話管理。
通常情況下,一個會話由用戶在其桌面上同時運行的所有應用程序組成。在Unix/X11下,一個會話可能包括運行在不同計算機和多個顯示器上的應用程序。
1、會話管理
(1)關閉一個會話
一個會話可以被會話管理器關閉,通常在用戶logout時為用戶關閉的。一個系統可以在緊急情況下執行自動關閉,例如:在掉電時。正常關機和掉電關機有很大的不同,在正常關機時,用戶可能想與應用程序交互,并確定哪些文件應該保存,哪些應該刪除。在掉電關機時,沒有時間進行交互,甚至于用戶不在現場。
(2)不同平臺上的協議和支持
Mac OS X和MS-Windows對應用程序還沒有完全的會話管理,如:沒法恢復以前的會話。它們支持正常的logout,在得到用戶確認后,應用程序有機會取消進程。這是與QApplication::comm.itData()方法相對應的功能。X11自從X11R6后,支持完整的會話管理。
(3)讓會話管理與Qt一起工作
通過重載QApplication::comm.itData()來使用你的應用程序參加正常的logout處理。如果你僅應用在MS-Windows平臺上,就只能提供這個重載了。你的應用程序***提供一個如圖5的程序關閉對話框。
圖5 程序關閉對話框
對于完全的會話管理(目前僅X11R6),你還應該關心應用程序的狀態存儲和下一個會話生命周期恢復狀態。
2、測試和調試會話管理
在Mac OS X和Windows上的會話管理支持由于這些操作系統本身的這種功能的缺乏而受到限制。為了簡單地關閉會話并驗證你的應用程序是否如期望的那樣執行,你***啟動一個其它的應用程序。這個應用程序將隨后得到關閉消息,這樣允許你取消關閉。
在Unix上你能使用一個支持標準的X11R6會話管理,或使用X聯盟提供的會話管理器xsm。xsm是標準X11R6安裝的一部分。它是一個具有圖形界面的會話管理器,你可能用它來管理會話。
下面是使用xsm的一個簡單的方法:
(1)運行X11R6.
(2)在你的home目錄下將創建僅包含下面一行的.xsmstartup文件:
- xterm
這將告訴xsm的default/failsafe(缺省/失敗安全)會話僅有xterm。否則,xsm將嘗試觸發包括窗口管理器twm在內多個客戶,這沒有什么用途。
(3)現在從另一個終端窗口啟動xsm。一個會話管理器和xterm將出現。xterm有一個其它的shell沒有的屬性:在xterm的shell里,SESSION_MANAGER環境變量指向了你剛啟動的會話管理器。
(4)在新的xterm窗口中啟動你的應用程序,應用程序將自動連接它到會話管理器。你能使用ClientList按鈕檢查連接是否成功。
注意:當你啟動或關閉會話管理的客戶時,不要保護ClientList為打開狀態。否則,xsm可能崩潰。
(5)使用會話管理器的Checkpoint和Shutdown按鈕的不同設置檢查你的應用程序執行行為。本地保存類型表示客戶端應該保存它們的狀態。它對應著QApplication::saveState()函數。全局保存類型請求應用程序保存它們沒存儲的變化到***的全局可訪問的存儲中。它觸發QApplication::commitData()。
(6)在用戶桌面上xsm是一個有用的會話管理器。作為一個測試環境它是穩定的而有用的。
小結:QT核心編程之會話管理的內容介紹完了,希望本既然內容對你有所幫助,更多資料參考在下面的編輯推薦。
【編輯推薦】