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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 重磅开源!
· 字符编码:从基础到乱码解决