再談應用程式的例項問題 (轉)

worldblog發表於2007-12-06
再談應用程式的例項問題 (轉)[@more@] 

再談應用的例項問題

廣州智軟公司
盧斌

---- 周長發先生的《Visual C++的若干技巧》提供了使應用程式只能執行一個例項的一種解決辦法,本人經過實踐後發現效果不錯,但也發現如果在啟動一個例項後,將應用程式的名稱做一下修改,執行修改後的檔案仍然可以啟動多個例項。而UltraEdit,GetRight等則不存在這樣的情況。

---- 檢視程式碼和VC的幫助後,發現問題在於原文在建立訊號量和設定尋找標記時使用的是CWinApp的成員變數 m_pszExeName。該成員變數其實是應用程式執行檔案的名稱去掉副檔名後的部分,而不是應用程式名。 真正的應用程式名應為成員變數m_pszAppName。於是將用到m_pszExeName的三處程式碼均改為m_pszAppName, 重新編譯執行,情況消失。

---- 雖然一般情況下不會修改應用程式執行檔案的名稱,但作為開發人員,我們的責任是將程式 儘量完美,存在缺陷不是我們所願,因此寫此短文以作補充。

---- 最後再提供一個方法和一個資訊:

---- 1.另一種使應用程式只能執行一個例項的方法,只需在InitInstance()的最開始新增下列語句即可:

HANDLE m_hMutex = CreateMutex(NULL,TRUE,m_pszAppName); if (GetLastError()==ERROR_ALREADY_EXISTS){ return FALSE; }


---- 但這種方法的不足之處是不能將已經啟動的例項啟用。

---- 2.在stingray公司整理開發的MFC FAQ軟體中也提供了一些方法。該軟體實際是一個MFC使用技巧的大彙集, 對使用MFC極有幫助,各位朋友不妨去stingray公司的主頁(或 ).

 


 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988836/,如需轉載,請註明出處,否則將追究法律責任。

相關文章