程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 防止一個沒有窗體的WINDOWS程序的重復運行

防止一個沒有窗體的WINDOWS程序的重復運行

編輯:關於C++

用互斥(Mutex),Mutex本來是多線程同步用的,防止多個線程訪問同一資源而引發沖突。用CreateMutex可以創建Mutex對象,實質上是一個kernel對象。

在任何Win32程序(包括GDI和Console)的啟動部分加上以下代碼(Console程序的main函數、MFC程序的CWinApp派生類的InitInstance成員函數、RawSDK程序的WinMain 函數):

hMutex=CreateMutex(
NULL,//nosecurityattributes
FALSE,//initiallynotowned
"RunOnlyOneInstance");//命名Mutex是全局對象
//在所有的process都可以訪問到
if(hMutex==NULL||ERROR_ALREADY_EXISTS==::GetLastError())
{
//程序第二次或以後運行時,會得到Mutex已經創建的錯誤
returnFALSE;
}

嘿嘿,是不是不用FindWindow優雅簡潔多了?

另外,如果要限定程序同時可運行n個實例怎麼辦?

Tips:用信號量(Semaphore)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved