如何在Visual Basic中使用互斥锁
时间:2020-03-05 18:37:28 来源:igfitidea点击:
我已经导入了kernel32
库。因此,我可以使用createMutex
函数,但是我不太确定各种参数和返回值。
这是经典的Visual Basic,而不是Visual Basic.NET,但我可能可以使用两种语言的答案形式。
解决方案:
好吧,根据文档,它看起来像:
- 安全属性(可以传递null)
- 是否最初拥有(可以传递false)
- 它的名字
高温超导
VB代码如下所示:
hMutex = CreateMutex(ByVal 0&, 1, ByVal 0&)
第一个参数是指向" SECURITY_ATTRIBUTES"结构的指针。如果我们不知道它是什么,则不需要它。传递NULL(0)。
如果调用线程应获得互斥锁的所有权,则第二个参数为" TRUE"(非零或者1)。否则为"假"。
第三个参数是互斥体名称,可以为NULL(0),如图所示。如果需要命名的互斥锁,则输入名称(任何唯一的值)。不确定VB
包装器是否将长度前缀的VB
字符串类型(BSTR
)封送给以空值结尾的Ascii / Unicode字符串,如果不,我们需要这样做,并且有许多示例。
祝你好运!
这是CreateMutex的VB6声明,我刚刚从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时停止运行程序时,该互斥锁不会被销毁。