vb6 -如何在Visual Basic中使用互斥锁

Translate

我已经导入了kernel32图书馆。所以,我有createMutex函数可用,但我不太确定各种参数和返回值。

这是经典的Visual Basic,而不是Visual Basic.NET,但我可能可以使用两种语言的答案形式。

This question and all comments follow the "Attribution Required."

所有的回答

Beryl Lee
Translate

VB代码如下所示:

hMutex = CreateMutex(ByVal 0&, 1, ByVal 0&)

第一个参数是指向SECURITY_ATTRIBUTES结构体。如果您不知道它是什么,则不需要它。传递NULL(0)。

第二个参数是TRUE(非零或1)(如果调用线程应获得互斥锁的所有权)。FALSE除此以外。

第三个参数是互斥体名称,可以为NULL(0),如图所示。如果需要命名的互斥锁,请传入名称(任何唯一的名称)。VB包装器封送长度为前缀的VB字符串类型(BSTR),如果没有的话,请输入一个以空值结尾的Ascii / Unicode字符串,您将需要执行此操作,并且这里有许多示例。

祝好运!

来源
Translate

这是VB6的声明CreateMutex-我只是从API查看器中复制了它们,您应该将其作为VB6安装的一部分。 VB6使用当前代码页将字符串编组为以空值结尾的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时才会销毁。

来源
Translate

好吧,基于文件资料看起来像:

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

高温超导

来源