上一主题下一主题
关键字
主题 : Waitforsingleobject 的返回值 WAIT_ABANDONED的问题
级别: 北风技术菜鸟

UID: 470411
精华: 0
发帖: 320
威望: 1581 点
学点: 790 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2014-06-27
最后登录: 2015-03-25
楼主  发表于: 2015-03-25 13:28||

Waitforsingleobject 的返回值 WAIT_ABANDONED的问题

7{*>agQh  
WaitForSingleObject(   li.;IWb0+)  
                  HANDLE hHandle,   UaeXY+O  
                   DWORD dwMilliseconds         e9 B0 64  
              ); .ioEI sg  
1、  返回值为  WAIT_ABANDONED                 是   “当hHandle为mutex时候,该对象没有被拥有该对象的线程在线程结束前释放,对象会引发此返回值” 'H;*W|:-]  
        我不理解  这个  WAIT_ABANDONED             ,为什么不是返回 WAIT_TIMEOUT        ? 没有释放线程,不是也应该超时吗,“没有释放”是不是我理解有问题? Km$\:Xo  
2、第二个问题应该是我基本功不扎实了 ?Ir:g=RP*  
第一段 SmO~,2=  
% pCTN P  
  UINT CFlushDlg::MyThreadProc( LPVOID pParam ) @r1_U,0e  
{ Z% UP6%  
WaitForSingleObject(g_event,INFINITE); OjA,]Gv6  
For(;;) a%0EiU  
{ pA4xbr2  
…………. A04U /;  
} JucY[`|JV  
return 0; aN3;`~{9  
} #/37V2E  
_yR^*}xJb  
这段没有判断,那到底是什么状态执行FOR循环呢?  Vxt+]5X  
第二段我就能够理解了~ .=; ;  
N'=gep0V@  
第二段 G3v5KmT  
TA~{1_l  
UINT CFlushDlg::MyThreadProc( LPVOID pParam ) q5S9C%b  
{ }Y4qS  
while(WaitForSingleObject(g_event,MT_INTERVAL)!=WAIT_OBJECT_0) e+K^A q  
{ ySI !d|_  
……………… ddR>7d}N  
} u]@[' 7  
return 0; kG*~ |ma  
} (7*}-Uy[C  
此帖悬赏中(剩余时间:已结束)...
最佳答案: 2 学点
热心助人剩余点数: 1 学点
级别: 北风资深工程师

UID: 472681
精华: 0
发帖: 1791
威望: 1815 点
学点: 2095 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2014-07-10
最后登录: 2015-04-07
沙发(1楼)  发表于: 2015-03-25 13:28||

The thread consumes very little processor time while waiting for the object state to become signaled or the time-out interval to elapse. @("AkYPj  
此函数等待时只消耗很少的 ****器时间,不会导致你说的崩溃的。
级别: 北风资深工程师

UID: 472685
精华: 0
发帖: 1930
威望: 1946 点
学点: 3280 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2014-07-10
最后登录: 2015-04-08
板凳(2楼)  发表于: 2015-03-25 13:28||

WAIT_ABANDONED_# 表示对应的等待条件满足 #A?U_32z/2  
WAIT_TIMEOUT 表示等待超时 -[ F<u  
你说如何区别不同状态,这是函数的内部实现了
级别: 北风资深评论员


UID: 470398
精华: 0
发帖: 3024
威望: 3862 点
学点: 8642 点
贡献: 90 点
好评: 0 点
学币: 112 个
注册时间: 2014-06-27
最后登录: 2015-04-07
地板(3楼)  发表于: 2015-03-25 13:29||

第一段用了第二个参数为 INFINITE,表示无限等待,直到等到对应的事件,所以返回时表示等到了。 C%P)_)- -V  
第二段的第二个参数为某个时间间隔,有可能超时,所以要检测返回值看是否真正等到事件发生。