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