waitforsingleobject等待线程结束(WaitForSingleObject 异常怎么捕获)
本文目录
- WaitForSingleObject 异常怎么捕获
- 怎样添加CEvent在MFC中,我想等线程A结束后再执行线程B,想用WaitForSingleObject来实现,
- VB WaitForSingleObject不假死等待进程怎么做
- 线程句柄作WaitForSingleObject的参数是什么意思
- 如何等待线程结束
WaitForSingleObject 异常怎么捕获
异常应该在线程的执行代码中捕获,在WaitForSingleObject当然无法捕获异常。WaitForSingleObject函数等待线程处理完毕。如果传入一个0值,则表示超时,这将令WaitForSingleObject马上返回,并且指出线程是否已经完成。如果线程没有完成,WaitForSingleObject返回WAIT_TIMEOUT。因而它只能告诉你操作是否完成或超时,你要捕捉错误,应该在线程中
怎样添加CEvent在MFC中,我想等线程A结束后再执行线程B,想用WaitForSingleObject来实现,
1. 创建CEvent实例2. 在启动线程A时,将该实例传入线程A3. 在线程A结束前,调用CEvent的SetEvent()成员 4. 在启动线程B的前面,等待CEvent的实例句柄::WaitForSingleObject(pEvent-》m_hObject, INFINITE);
VB WaitForSingleObject不假死等待进程怎么做
WaitForSingleObject这个一般是多线程的时候用的,用来同步线程的。给你一个例子吧。’以下在TEvent.ClsOption ExplicitConst INFINITE = &HFFFFConst ERROR_ALREADY_EXISTS = 183&Const WAIT_TIMEOUT = &H102Private Declare Function CreateEvent Lib “kernel32“ Alias “CreateEventA“ _(lpEventAttributes As Any, ByVal bManualReset As Long, _ByVal bInitialState As Long, ByVal lpName As String) As LongPrivate Declare Function SetEvent Lib “kernel32“ (ByVal hEvent As Long) As LongPrivate Declare Function ResetEvent Lib “kernel32“ (ByVal hEvent As Long) As LongPrivate Declare Function PulseEvent Lib “kernel32“ (ByVal hEvent As Long) As LongPrivate Declare Function WaitForSingleObject Lib “kernel32“ (ByVal hHandle As Long, _ByVal dwMilliseconds As Long) As LongPrivate Declare Function CloseHandle Lib “kernel32“ (ByVal hObject As Long) As LongPrivate hEvent As LongPrivate m_TimeOut As LongPublic Function Create(ByVal EventName As String) As LongIf EventName = ““ Then Create = -1 Exit FunctionEnd IfIf hEvent 《》 0 Then Create = 0 Exit FunctionEnd IfDim i As LonghEvent = CreateEvent(ByVal 0, 1, 0, EventName)If i = 0 Then Create = 1End IfEnd FunctionPublic Sub DelEvent() Call CloseHandle(hEvent) hEvent = 0End SubPublic Sub Signal()Call SetEvent(hEvent)End SubPublic Sub PulseSignal()Call PulseEvent(hEvent)End SubPublic Sub UnSignal()Call ResetEvent(hEvent)End SubPublic Function ChkSignaled()If hEvent = 0 Then ChkSignaled = -1 Exit FunctionEnd IfDim i As Longi = WaitForSingleObject(hEvent, m_TimeOut)If i = 0 Then ChkSignaled = 1Else If i = WAIT_TIMEOUT Then ChkSignaled = 0 Else ChkSignaled = -1 End IfEnd IfEnd FunctionPublic Property Get TimeOut() As LongTimeOut = m_TimeOutEnd PropertyPublic Property Let TimeOut(ByVal vNewValue As Long)If vNewValue 《 0 Then vNewValue = 0End Ifm_TimeOut = vNewValueEnd PropertyPrivate Sub Class_Initialize()m_TimeOut = INFINITEEnd SubPrivate Sub Class_Terminate()Call DelEventEnd Sub’以下在Form 需3个Command Button 一个labelOption ExplicitDim aa As New TEventPrivate Sub Command1_Click()aa.SignalEnd SubPrivate Sub Command2_Click()aa.UnSignalEnd SubPrivate Sub Command3_Click()Dim i As Longaa.TimeOut = 5000i = aa.ChkSignaledLabel1.Caption = “等待中“DoEventsIf i = 1 Then Label1.Caption = “绿灯了“Else Label1.Caption = “Time Out了“End IfEnd SubPrivate Sub Form_Load()aa.Create (“MyEvent“)End Sub 还不清楚可以加我,一般晚上在的。
线程句柄作WaitForSingleObject的参数是什么意思
线程结束时,waitforsingleObject才有信号。》》hThread1代表的线程如果在运行,就要一直等下去,直到线程退出来吗?是否一直等下去,取决于第二个参数传入的内容。如下所示:INFINITE:像你所使用的那样传入此参数,此函数会一直等待下去。0 :函数检测对象状态并立即返回》0 :如果超出等待时间,线程仍然处于非信号状态,将返回WAIT_TIMEOUT
如何等待线程结束
等待一个线程的结束Win32 提供WaitForSingleObject()函数,其第一个参数是一个核心对象(如线程)的 handle。为方便讨论,把等待线程称为线程#1,把被等待线程称为线程#2。调用 WaitForSingleObject()并放置一个“线程句柄”作为参数,将使线程#1开始睡眠,直到线程#2结束。像Sleep()函数一样,WaitForSingleObject()也有一个参数用来指定最长的等待时间。DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds);hHandle:等待对象的 handle(代表一个核心对象)。dwMilliseconds:等待的最长时间。时间终了,即使 handle尚未成为激发状态,此函数也要返回。此值可以是0(代表立刻返回),也可以是 INFINITE代表无穷等待。如果函数失败,返回WAIT_FAILED。这时可调用 GetLastError()取得更多信息。此函数的成功有三个因素:1. 等待的目标(核心对象)变成激发状态。返回值为WAIT_OBJECT_0。2. 核心对象变成激发状态之前,等待时间终了。返回值为WAIT_TIMEOUT。3. 如果一个拥有mutex(互斥器)的线程结束前没有释放mutex,则传回 WAIT_ABANDONED。(abandoned:废弃)获得一个线程对象的 handle之后,WaitForSingleObject()要求操作系统让线程 #1 睡眠,直到以下任何一种情况发生:1. 线程#2结束2. dwMilliseconds时间终了。该值系从函数调用后开始计算。由于操作系统持续追踪线程#2,即使线程#2 失事或被强迫结束,WaitForSingleObject()仍然能够正常运作。如果想一直等待某个线程,直到线程退出,可以用如下代码:WaitForSingleObject( hThrd, INFINITE );关于time-out,有一个特别重要的用途,但很少被人注意。设定time-out为0,能够检查handle的状态并立刻返回,没有片刻停留。如果handle已经备妥,那么这个函数会成功并传回 WAIT_OBJECT_0。否则,这个函数立刻返回并传回 WAIT_TIMEOUT。另外可以利用 time-out提供一个动画,表示正在等待某个线程的结束。可以每 500毫秒就time-out一次,更新图示,然后再继续等待。WaitForSingleObject()可以面对许多种 handles工作,不一定非要是的线程 handle。事实上,Win32中大部分以HANDLE表示的对象都能够作为 WaitForSingleObject()的等待目标。视所拥有的对象不同,操作系统等待的事情也不一样。形式上来说,系统等待着这一对象“被激发”。
更多文章:

infrastructure怎么读(infrastructure怎么读)
2025年4月9日 08:00

singular matrix(singular matrix 怎么解决)
2025年4月10日 15:50

country music(nation和country有什么区别,应用场景上有需要注意的么)
2025年2月10日 16:30

目前常用的原型设计软件有哪些?WeaselCoffee是神马
2025年2月19日 06:10

win7如何彻底清理c盘(win7c盘变红满了怎么清理不会删掉有用的)
2025年3月8日 19:10

nutritional什么意思(nutrient和nutrition的区别是什么)
2025年3月27日 08:20

jst连接器代理商(我是一名采购,听说现在的假货跟真的一样,我要如何分辨买回来的JST端子是真是假)
2025年2月25日 17:40

commando(电脑想升级,华硕commando主板最高能上什么CPU和显卡,内存)
2025年2月21日 22:40

做跨境电商用POD模式靠谱么?DNSPod的DNS地址是什么
2025年4月12日 21:50

socket error 11004(统一加速器出现Socket Error #11004 要咋么办)
2025年2月22日 21:00

在线编程课哪个比较好(最近想在线上给孩子报个编程课学习,请问有什么平台比较好的,好课测评这个平台如何)
2025年3月31日 05:20

machine tool(machine tools怎么样)
2025年2月28日 16:30

removeattr(jquery 的removeAttr和attr)
2025年2月28日 01:20

vaseline是什么意思(vaseline-original是什么意思)
2025年3月25日 06:00

jsoup模拟登录(求真正有效的可以模拟登录新浪微博的java代码,后续可以用Jsoup进行抓取急急!!登录成功马上给分!)
2025年3月25日 07:50