vb6.0 CreateEvent

VB WaitForSingleObject不假死等待进程怎么做
Call WaitForSingleObject(lngPHandle, INFINITE)
谢谢,我已经问穷了,没积分了 !
我的目的就是多线程!一个运行完等进程结束后自动调用下个程序,,先谢谢你的回答!

TEvent类:

Option Explicit
Const INFINITE = &HFFFF
Const ERROR_ALREADY_EXISTS = 183&
Const WAIT_TIMEOUT = &H102
Private Declare Function CreateEvent Lib "kernel32" Alias "CreateEventA" (lpEventAttributes As Any, ByVal bManualReset As Long, ByVal bInitialState As Long, ByVal lpName As String) As Long
Private Declare Function SetEvent Lib "kernel32" (ByVal hEvent As Long) As Long
Private Declare Function ResetEvent Lib "kernel32" (ByVal hEvent As Long) As Long
Private Declare Function PulseEvent Lib "kernel32" (ByVal hEvent As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private hEvent As Long
Private m_TimeOut As Long
Public Function Create(ByVal EventName As String) As Long
If EventName = "" Then
Create = -1
Exit Function
End If
If hEvent <> 0 Then
    Create = 0
    Exit Function
End If

Dim i As Long
hEvent = CreateEvent(ByVal 0, 1, 0, EventName)
If i = 0 Then

 Create = 1
 End If

End Function

 Public Sub DelEvent()
 Call CloseHandle(hEvent)
 hEvent = 0
 End Sub
 
 Public Sub Signal()
 Call SetEvent(hEvent)
 End Sub
 Public Sub PulseSignal()
 Call PulseEvent(hEvent)
 End Sub
 Public Sub UnSignal()
 Call ResetEvent(hEvent)
 End Sub
 Public Function ChkSignaled()
 If hEvent = 0 Then
 ChkSignaled = -1
 Exit Function
 End If
 Dim i As Long
 i = WaitForSingleObject(hEvent, m_TimeOut)
 If i = 0 Then
 ChkSignaled = 1
 Else
 If i = WAIT_TIMEOUT Then
 ChkSignaled = 0
 Else
 ChkSignaled = -1
 End If
 End If
 End Function
 
 Public Property Get TimeOut() As Long
 TimeOut = m_TimeOut
 End Property
 Public Property Let TimeOut(ByVal vNewValue As Long)
 If vNewValue < 0 Then
 vNewValue = 0
 End If
 m_TimeOut = vNewValue
 End Property
 Private Sub Class_Initialize()
 m_TimeOut = INFINITE
 End Sub
 Private Sub Class_Terminate()
 Call DelEvent
 End Sub

//*********************************************

以下在Form 需3个Command Button 一个label

//**********************************************

Option Explicit
Dim aa As New TEvent
Private Sub Command1_Click()
aa.Signal
End Sub
Private Sub Command2_Click()
aa.UnSignal
End Sub
Private Sub Command3_Click()
Dim i As Long
aa.TimeOut = 5000
i = aa.ChkSignaled
Label1.Caption = "等待中"
DoEvents
If i = 1 Then
Label1.Caption = "绿灯了"
Else: Label1.Caption = "Time Out了"
End If
End Sub
Private Sub Form_Load()
aa.Create ("MyEvent")
End Sub

 

转载于:https://www.cnblogs.com/MMLoveMeMM/articles/3195390.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值