当前位置:编程学习 > VB >>

CreateSemaphore创建失败

创建一个信号量对象(用于多线程间同步)
h=CreateSemaphore (0, 1, 10, “a”)
不管我参数怎么改,返回值永远是0,
调用GetLastError() 得到的错误代码是:〖1305〗-修订级别未知。
不知道错在哪里了… --------------------编程问答-------------------- 说明】
  创建一个新的信号机 

【返回值】
  Long,如执行成功,返回信号机对象的句柄;零表示出错。会设置GetLastError。即使返回一个有效的句柄,但倘若它指出同名的一个信号机已经存在,那么GetLastError也会返回ERROR_ALREADY_EXISTS 

【其它】
  一旦不再需要,一定记住用CloseHandle关闭信号机的句柄。它的所有句柄都关闭以后,对象自己也会删除
  一旦值大于零,信号机就会触发(发出信号)。ReleaseSemaphore函数的作用是增加信号机的计数。如果成功,就调用信号机上的一个等待函数来减少它的计数

【参数表】
  lpSemaphoreAttributes -  SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,或传递零值(将参数声明为ByVal
  As Long,并传递零值)——表示采用不允许继承的默认描述符。该参数定义了信号机的安全特性
  lInitialCount --  Long,设置信号机的初始计数。可设置零到lMaximumCount之间的一个值
  lMaximumCount --  Long,设置信号机的最大计数
  lpName ---------  String,指定信号机对象的名称。用vbNullString可创建一个未命名的信号机对象。如果已经存在拥有这个名字的一个信号机,就直接打开现成的信号机。这个名字可能不与一个现有的互斥体、事件、可等待计时器或文件映射的名称相符

你的第一个参数使用错误了吧? --------------------编程问答--------------------

Option Explicit
Private Declare Function CreateSemaphore Lib "kernel32" Alias "CreateSemaphoreA" (lpSemaphoreAttributes As SECURITY_ATTRIBUTES, ByVal lInitialCount As Long, ByVal lMaximumCount As Long, ByVal lpName As String) As Long
Private Type SECURITY_ATTRIBUTES
        nLength As Long
        bInheritHandle As Long
        lpSecurityDescriptor As Long
End Type

Dim lpSEC As SECURITY_ATTRIBUTES

Private Sub Command1_Click()
    Dim lngP As Long
    lngP = CreateSemaphore(lpSEC, 1, 10, "a")
End Sub


补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,