代码之家  ›  专栏  ›  技术社区  ›  Goyuix

如何在Visual Basic中使用互斥体

vb6
  •  23
  • Goyuix  · 技术社区  · 16 年前

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

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

    3 回复  |  直到 16 年前
        1
  •  8
  •   CloudyMarble    12 年前

    VB代码如下所示:

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

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

    第二个参数是 TRUE (非零或1)如果调用线程应该拥有互斥体。 FALSE 否则。

    第三个参数是互斥体名称,可以为空(0),如图所示。如果您需要一个命名的互斥体,请将名称(任何唯一的)传入。不确定是否 VB 包装封送前缀长度 VB 字符串类型 BSTR )如果不是以空结尾的ascii/unicode字符串,则需要这样做,并且有许多示例。

    祝你好运!

        2
  •  10
  •   MarkJ    15 年前

    这是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时才会被破坏。

        3
  •  2
  •   whoan    10 年前

    嗯,根据 documentation 看起来像:

    1. 安全属性(不能传递空值)
    2. 是否最初拥有(可以通过假)
    3. 它的名字

    高温高压