b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

createmutex_createevent_releasemutex

电脑杂谈  发布时间:2017-01-26 10:07:23  来源:网络整理

releasemutex_createmutex_createevent

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

createevent_releasemutex_createmutex

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

回答

回答2:

ReleaseMutex是释放Mutex的所有权。

CreateMutex第二个参数指定当前线程是否拥有Mutex的所有权,若此命名Mutex是你创建的,bInitialOwner又为非零,则当前线程拥有

Mutex的所有权,否则都不会拥有Mutex的所有权!

所以你对bInitialOwner为0时CreateMutex创建的Mutex,调用ReleaseMutex是错误的,错误288代表你无权这样做!

这里,简单CloseHandle关闭即可,在bInitialOwner为非零时调用CreateMutex,你才需调用ReleaseMutex,当然,其后仍需调用

CloseHandle。releasemutex

若你的程序不调用CloseHandle,该Mutex会一直存在,直到程序退出,IDE环境下可能要退出VB才行。releasemutex2014-05-30weitz88


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-28795-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...