如何在Visual Basic中使用互斥锁

问题描述:

我导入了kernel32库。所以,我有createMutex函数可用,但我不太确定各种参数和返回值。如何在Visual Basic中使用互斥锁

这是经典的Visual Basic,而不是Visual Basic.NET,但我可以用任何一种语言以答案的形式工作。

VB代码看起来像这样:

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

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

第二个参数是TRUE(非零或1),如果调用线程应该取得互斥量的所有权。 FALSE否则。

第三个参数是互斥锁名称,可能为NULL(0),如图所示。如果您需要命名互斥锁,请将名称(任何唯一的)传入。不确定VB封装器是否将以长度为前缀的VB字符串类型(BSTR)封装为以空字符结尾的Ascii/Unicode字符串(如果不是),则需要要做到这一点,并有很多例子。

祝你好运!

那么,基于它看起来像documentation

  1. 安全属性(可传递null)
  2. 无论是最初拥有(可通假)
  3. 它的名字

HTH

下面是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。