MUTEX的释放问题,急
我的程序建立MUTEX,但是程序关闭后并不能释放MUTEX,RELEASEMUTEX总是返回288号错误.这是为什么呀~~~?急等.
'------模块代码
Public Mutex As Long
Public Declare Function CreateMutex Lib "kernel32 " Alias "CreateMutexA " (lpMutexAttributes As SECURITY_ATTRIBUTES, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
Public Declare Function OpenMutex Lib "kernel32 " Alias "OpenMutexA " (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal lpName As String) As Long
Public Declare Function ReleaseMutex Lib "kernel32 " (ByVal hMutex As Long) As Long
Public Declare Function CloseHandle Lib "kernel32 " (ByVal hObject As Long) As Long
Public Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
'------窗体代码
Private Sub Command1_Click()
Dim sa As SECURITY_ATTRIBUTES
Mutex = CreateMutex(sa, False, "TREXRIII ")
If Err.LastDllError = 183 Then
Label1.Caption = "已存在 " & Mutex
Else
Label1.Caption = "已建立 " & Mutex
End If
End Sub
Private Sub Command2_Click()
ReleaseMutex Mutex
If Err.LastDllError <> 0 Then
Label1.Caption = "释放失败 " & Err.LastDllError
End If
End Sub
[解决办法]
http://www.programfan.com/doc/vbapi/CreateMutex.htm
[解决办法]
ReleaseMutex是释放Mutex的所有权。
CreateMutex第二个参数指定当前线程是否拥有Mutex的所有权,若此命名Mutex是你创建的,bInitialOwner又为非零,则当前线程拥有
Mutex的所有权,否则都不会拥有Mutex的所有权!
所以你对bInitialOwner为0时CreateMutex创建的Mutex,调用ReleaseMutex是错误的,错误288代表你无权这样做!
这里,简单CloseHandle关闭即可,在bInitialOwner为非零时调用CreateMutex,你才需调用ReleaseMutex,当然,其后仍需调用
CloseHandle。
若你的程序不调用CloseHandle,该Mutex会一直存在,直到程序退出,IDE环境下可能要退出VB才行。