如何在Visual Basic中使用互斥锁

27

我已经导入了 kernel32 库,因此我可以使用 createMutex 函数,但是我不太确定各种参数和返回值。

这是经典的Visual Basic,不是Visual Basic.NET,但我可能可以用任何一种语言回答。

3个回答

10

这里是用于CreateMutex的VB6声明 - 我只是从API查看器中复制了它们,这应该是您的VB6安装的一部分。VB6使用当前代码页将字符串编组为以null结尾的ANSI。

Public Type SECURITY_ATTRIBUTES
   nLength As Long
   lpSecurityDescriptor As Long
   bInheritHandle As Long 
End Type

Public Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" _
   (lpMutexAttributes As SECURITY_ATTRIBUTES, ByVal bInitialOwner As Long, _
    ByVal lpName As String) As Long
请注意,如果您从VB6 IDE创建互斥量,则该互斥量属于IDE,并且仅在关闭IDE时才会被销毁,而不是停止运行程序时。

8
VB代码大致如下:
hMutex = CreateMutex(ByVal 0&, 1, ByVal 0&)

第一个参数是指向SECURITY_ATTRIBUTES结构的指针。如果您不知道它是什么,那么您不需要它。请传递NULL(0)。
第二个参数是TRUE(非零或1),如果调用线程应该拥有互斥量。否则为FALSE
第三个参数是互斥名称,可以为NULL(0),如所示。如果需要命名的互斥体,请传递名称(任何唯一的名称)。不确定VB包装器是否将长度前缀的VB字符串类型(BSTR)转换为以空字符结尾的ASCII / Unicode字符串,如果没有,您需要这样做,并且有许多示例。
祝你好运!

1

根据文档,看起来是这样的:

  1. 安全属性(可以传递null)
  2. 它是否最初拥有(可以传递false)
  3. 它的名称

希望对你有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接