首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

MUTEX的释放有关问题,

2012-01-13 
MUTEX的释放问题,急我的程序建立MUTEX,但是程序关闭后并不能释放MUTEX,RELEASEMUTEX总是返回288号错误.这

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才行。

热点排行