WaitForSingleObject阻塞问题

gepo 2006-09-07 10:17:11
我是这样写的:
void CTest6Dlg::OnOK()
{
start.SetEvent();
if(WaitForSingleObject(start,2000)==WAIT_OBJECT_0)
MessageBox("normal!");

if(WaitForSingleObject(start,2000)==WAIT_TIMEOUT)
MessageBox("waitout!");
}
但是执行时,两个对话框都出现了,请问是什么问题?
...全文
759 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
elson_hao 2006-09-11
  • 打赏
  • 举报
回复
学习
fingerblue1982 2006-09-09
  • 打赏
  • 举报
回复
CEvent被设置了,但是waitforsingleobject为什么没有被激活?
你肯定是这样写的:CEvent start;注意这里是默认的,默认的event是自动设置的,所以
当你执行完
if(WaitForSingleObject(start,2000)==WAIT_OBJECT_0)
MessageBox("normal!");
这时start已经被自动置为非激发状态了.
所以当你执行
if(WaitForSingleObject(start,2000)==WAIT_TIMEOUT)
MessageBox("waitout!");
自然就是超时提示了.给分吧
尘雨 2006-09-09
  • 打赏
  • 举报
回复
第一个wait后,start不是处于信号态吗?

resetevent,是将start改成非信号态,为什么还要调用?

evet对象实例化的时候可以设置手动重置和自动重置

如果是手动重置wait阻塞等待激发,激发后,event必须被resetevent才能重新变为非激发状态
否则,继续wait就始终返回了

如果是自动重置,那么wait阻塞等待激发,返回后event自动被置为非激活。继续wait可以阻塞知道event再次被激发
鄢老 2006-09-09
  • 打赏
  • 举报
回复
同意ifhxfjb(New人)的说法,另外再强调一下,当第一次调用Wait后start就处于无信号状态
mimong_lin 2006-09-08
  • 打赏
  • 举报
回复
第一个wait后,start不是处于信号态吗?

resetevent,是将start改成非信号态,为什么还要调用?
snowbirdfly 2006-09-08
  • 打赏
  • 举报
回复
同意二楼~~~
你可以通过ELSE来进行判别就可以了~~~
hxfjb 2006-09-08
  • 打赏
  • 举报
回复
event是与线程无关的,即该线程第一次调用waitForSingleObject则可以获取信号量,第二次调用的时候不会因为该线程已经拥有该信号量就返回,因为该Event现在是无信号状态.所以如果你给定了INFINITE参数,则死锁了,当然,如果你给定了2000毫秒,则等待一会儿就告诉你超时了.
GoAround 2006-09-08
  • 打赏
  • 举报
回复
第一个setevent是event处于激发状态,所以第一个wait成功,第一个messagebox显示
第一个wait成功,而且没有resetevent,因此第二个wait肯定会失败,两秒后超时,第二个messagebox也出来了
mimong_lin 2006-09-07
  • 打赏
  • 举报
回复
CEvent start;
start.SetEvent();
//if(WaitForSingleObject(start,2000)==WAIT_OBJECT_0)
// MessageBox("normal!");

//start.SetEvent();
if(WaitForSingleObject(start,2000)==WAIT_TIMEOUT)
MessageBox("waitout!");
此是不弹出对话框。

CEvent start;
start.SetEvent();
if(WaitForSingleObject(start,2000)==WAIT_OBJECT_0)
MessageBox("normal!");

start.SetEvent();
if(WaitForSingleObject(start,2000)==WAIT_TIMEOUT)
MessageBox("waitout!");
此时是弹出一个。

所以,可能的原因是WaitForSingleObject更改了start的状态

但这不合的。所以,关注。。。。。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧