Windows程式設計--互斥量Mutex操作函式
Windows程式設計–互斥量Mutex操作函式
常用操作mutex的函式有:ReleaseMutex / OpenMutex / WaitForSingleObject / WaitForMultipleObjects。
CreateMutex函式
CreateMutex作用是找出當前系統是否已經存在指定程序的例項。如果沒有則建立一個互斥體。
CreateMutex()函式可用來建立一個有名或無名的互斥量物件,其函式原型為:
VB宣告
Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As SECURITY_ATTRIBUTES, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
VC宣告
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTESlpMutexAttributes, // 指向安全屬性的指標
BOOLbInitialOwner, // 初始化互斥物件的所有者
LPCTSTRlpName // 指向互斥物件名的指標
);
返回值
Long,如執行成功,就返回互斥體物件的控制代碼;零表示出錯。會設定GetLastError。如果返回的是一個有效控制代碼,但指定的名字已經存在,GetLastError也會設為ERROR_ALREADY_EXISTS,bInitialOwner的值將會被忽略。如果呼叫者限制了許可權,GetLastError將會返回ERROR_ACCESS_DENIED,這個時候應該使用OpenMutex函式。
引數表
引數 型別及說明
lpMutexAttributes SECURITY_ATTRIBUTES,指定一個SECURITY_ATTRIBUTES結構,或傳遞零值(將引數宣告為ByVal As Long,並傳遞零值),表示使用不允許繼承的預設描述符
bInitialOwner BOOL,如建立程序希望立即擁有互斥體,則設為TRUE。一個互斥體同時只能由一個執行緒擁有
lpName String,指定互斥體物件的名字。用vbNullString建立一個未命名的互斥體物件。如已經存在擁有這個名字的一個事件,則開啟現有的已命名互斥體。這個名字可能不與現有的事件、訊號機、可等待計時器或檔案對映相符
OpenMutex函式
OpenMutex函式為現有的一個已命名互斥體物件建立一個新控制代碼。
函式功能:
函式原型:
HANDLE OpenMutex(
DWORD dwDesiredAccess, // access
BOOL bInheritHandle, // inheritance option
LPCTSTR lpName // object name
);
引數:
dwDesiredAccess:
MUTEX_ALL_ACCESS 請求對互斥體的完全訪問
MUTEX_MODIFY_STATE 允許使用 ReleaseMutex 函式
SYNCHRONIZE 允許互斥體物件同步使用
bInheritHandle : 如希望子程序能夠繼承控制代碼,則為TRUE
l**pName** :要開啟物件的名字
返回值:如執行成功,返回物件的控制代碼;零表示失敗。若想獲得更多錯誤資訊,請呼叫GetLastError函式。
備註:一旦不再需要,注意一定要用 CloseHandle 關閉互斥體控制代碼。如物件的所有控制代碼都已關閉,那麼物件也會刪除
速查:Windows NT/2000/XP:3.1以上版本;Windows 95/98/Me:95以上版本:
標頭檔案:Windows.h ;庫檔案:Kernel32.lib。
DLL:Kernel32.dll.
ReleaseMutex函式
ReleaseMutex是一種線性指令,具有釋放執行緒擁有的互斥體的控制權。
說明
ReleaseMutex函式的功能是釋放互斥物件的控制權
函式原型
BOOL WINAPI ReleaseMutex(
HANDLE hMutex
);
返回值
BOOL,TRUE表示成功,FALSE表示失敗。
引數表
hMutex:HANDLE,制定一個互斥體的控制代碼。
註釋
一個執行緒釋放了互斥物件的控制權後,如果其他程序在等待互斥物件置位,則等待的執行緒可以得到該互斥物件,等待函式返回,互斥物件被新的執行緒所擁有。