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

 

posted @   MMLoveMeMM  阅读(904)  评论(1编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示