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

v) VhR2d3  
WaitForSingleObject(   &E{i#r)'T  
                  HANDLE hHandle,   M10u?  
                   DWORD dwMilliseconds         WL6p+sN'  
              ); F:P&hK  
1、  返回值为  WAIT_ABANDONED                 是   “当hHandle为mutex时候,该对象没有被拥有该对象的线程在线程结束前释放,对象会引发此返回值” NyTGvBf  
        我不理解  这个  WAIT_ABANDONED             ,为什么不是返回 WAIT_TIMEOUT        ? 没有释放线程,不是也应该超时吗,“没有释放”是不是我理解有问题? }$zJdf,\  
2、第二个问题应该是我基本功不扎实了 : q+D`s  
第一段 pH'1be{K  
_&~y{;)S  
  UINT CFlushDlg::MyThreadProc( LPVOID pParam ) :M %s:,]R  
{ G3.MS7 J  
WaitForSingleObject(g_event,INFINITE); 8r 4 L4  
For(;;) KioD/  
{ 7fB:wPlG;  
…………. 3cp"UU}.  
} Q%AD6G(7  
return 0; QCI-YJ&o  
} NV FgRJ&  
'x-PQQ  
这段没有判断,那到底是什么状态执行FOR循环呢? SAa hkX  
第二段我就能够理解了~ l*l(QvN_  
x4HVB  
第二段 (:p&[HNuN  
Q\>Kd N{  
UINT CFlushDlg::MyThreadProc( LPVOID pParam ) [}/\W`C  
{ 0CYm%p8!  
while(WaitForSingleObject(g_event,MT_INTERVAL)!=WAIT_OBJECT_0) @'K+   
{ Cu%|}xq  
……………… *(~=L%s  
} ya9V+/i7T_  
return 0; JvHGu&Nr!  
} P2n b&lVdu  
此帖悬赏中(剩余时间:已结束)...
最佳答案: 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. jP]'gQ!-w  
此函数等待时只消耗很少的 ****器时间,不会导致你说的崩溃的。
级别: 北风资深工程师

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

WAIT_ABANDONED_# 表示对应的等待条件满足 5LaF'>1yY  
WAIT_TIMEOUT 表示等待超时 ?LSwJ @#  
你说如何区别不同状态,这是函数的内部实现了
级别: 北风资深评论员


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

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