CreateMutex作用
找出當前系統是否已經存在指定進程的執行個體。如果沒有則建立一個互斥體。CreateMutex()函數可用來建立一個有名或無名的互斥量對象,其函數原型為
VC聲明
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTESlpMutexAttributes, // 指向安全屬性的指標
BOOLbInitialOwner, // 初始化互斥對象的所有者
LPCTSTRlpName // 指向互斥對象名的指標
);
編輯本段說明
建立一個互斥體(MUTEX)
傳回值
Long,
如執行成功,就返回互斥體對象的控制代碼;零表示出錯。會設定GetLastError。即使返回的是一個有效控制代碼,但倘若指定的名字已經存在,GetLastError也會設為ERROR_ALREADY_EXISTS
參數表
參數 類型及說明
lpMutexAttributes SECURITY_ATTRIBUTES,指定一個SECURITY_ATTRIBUTES結構,或傳遞零值(將參數聲明為ByVal As Long,並傳遞零值),表示使用不允許繼承的預設描述符
bInitialOwner Long,如建立進程希望立即擁有互斥體,則設為TRUE。一個互斥體同時只能由一個線程擁有
lpName String,指定互斥體對象的名字。用vbNullString建立一個未命名的互斥體對象。如已經存在擁有這個名字的一個事件,則開啟現有的已命名互斥體。這個名字可能不與現有的事件、訊號機、可等待計時器或檔案對應相符
編輯本段註解
一旦不再需要,注意必須用CloseHandle函數將互斥體控制代碼關閉。從屬於它的所有控制代碼都被關閉後,就會刪除對象
進程中止前,一定要釋放互斥體,如不慎未採取這個措施,就會將這個互斥體標記為廢棄,並自動釋放所有權。共用這個互斥體的其他應用程式也許仍然能夠用它,但會接收到一個廢棄狀態資訊,指出上一個所有進程未能正常關閉。這種狀況是否會造成影響取決於涉及到的具體應用程式
編輯本段使用例子:
(1)、 h_mutex1=CreateMutex(NULL,FALSE,"mutex_for_readcount");//建立一個互斥體
(2)、HANDLE m_hMutex = CreateMutex(NULL, FALSE, "Sample07");// 檢查錯誤碼
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
// 如果已有互斥量存在則釋放控制代碼並複位互斥量
CloseHandle(m_hMutex);
m_hMutex = NULL;
// 程式退出
return FALSE;
};
//上面這段代碼示範了有名互斥量在進程互斥中的用法。代碼的核心是CreateMutex()對有名互斥量的建立。
CreateMutex() 用於有獨佔要求的程式 (在其進程運行期間不允許其他使用此連接埠裝置的程式運行,或不允許同名程式運行)。