上一主题下一主题
关键字
主题 : 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的问题

-TL `nGF  
WaitForSingleObject(   <\0+*`">g  
                  HANDLE hHandle,   i;+]Y   
                   DWORD dwMilliseconds         G'>?/l#  
              ); J})#43P  
1、  返回值为  WAIT_ABANDONED                 是   “当hHandle为mutex时候,该对象没有被拥有该对象的线程在线程结束前释放,对象会引发此返回值” Gvo|uB#  
        我不理解  这个  WAIT_ABANDONED             ,为什么不是返回 WAIT_TIMEOUT        ? 没有释放线程,不是也应该超时吗,“没有释放”是不是我理解有问题? "l83O8 L  
2、第二个问题应该是我基本功不扎实了 |q0MM^%"  
第一段 i^Ba?r;*  
P1 \:hh  
  UINT CFlushDlg::MyThreadProc( LPVOID pParam ) p xj}% LH  
{ bKAR}JM&  
WaitForSingleObject(g_event,INFINITE); %+>t @F,GM  
For(;;) Y$tg z)  
{ IiX`l6L~W  
…………. l8O12  
} Kr;7~`$[  
return 0; -;VKtBXP</  
} ux8:   
_PI w""ssr  
这段没有判断,那到底是什么状态执行FOR循环呢? ~c;D@.e\  
第二段我就能够理解了~ fe,A\W&8  
Er 4P  
第二段 ^N{Lau  
\I3={ii0  
UINT CFlushDlg::MyThreadProc( LPVOID pParam ) ;'\#+GZ9p  
{ N sUFM  
while(WaitForSingleObject(g_event,MT_INTERVAL)!=WAIT_OBJECT_0) =CCxY7)M+.  
{ 'yrU_k,h  
……………… /.?m9O^ F  
} muD7+rn?&  
return 0;  xr }jw  
} ]GSs{'Uh B  
此帖悬赏中(剩余时间:已结束)...
最佳答案: 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. ,PWMl [X  
此函数等待时只消耗很少的 ****器时间,不会导致你说的崩溃的。
级别: 北风资深工程师

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

WAIT_ABANDONED_# 表示对应的等待条件满足 d J.up*aR  
WAIT_TIMEOUT 表示等待超时 ~A03J:Yc7  
你说如何区别不同状态,这是函数的内部实现了
级别: 北风资深评论员


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

第一段用了第二个参数为 INFINITE,表示无限等待,直到等到对应的事件,所以返回时表示等到了。 lVq5>:'}^;  
第二段的第二个参数为某个时间间隔,有可能超时,所以要检测返回值看是否真正等到事件发生。