我是这样写的:
void CTest6Dlg::OnOK()
{
start.SetEvent();
if(WaitForSingleObject(start,2000)==WAIT_OBJECT_0)
MessageBox("normal!"); if(WaitForSingleObject(start,2000)==WAIT_TIMEOUT)
MessageBox("waitout!");
}
但是执行时,两个对话框都出现了,请问是什么问题?
void CTest6Dlg::OnOK()
{
start.SetEvent();
if(WaitForSingleObject(start,2000)==WAIT_OBJECT_0)
MessageBox("normal!"); if(WaitForSingleObject(start,2000)==WAIT_TIMEOUT)
MessageBox("waitout!");
}
但是执行时,两个对话框都出现了,请问是什么问题?
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的状态但这不合的。所以,关注。。
第一个wait成功,而且没有resetevent,因此第二个wait肯定会失败,两秒后超时,第二个messagebox也出来了
你可以通过ELSE来进行判别就可以了~~~
否则,继续wait就始终返回了如果是自动重置,那么wait阻塞等待激发,返回后event自动被置为非激活。继续wait可以阻塞知道event再次被激发
你肯定是这样写的:CEvent start;注意这里是默认的,默认的event是自动设置的,所以
当你执行完
if(WaitForSingleObject(start,2000)==WAIT_OBJECT_0)
MessageBox("normal!");
这时start已经被自动置为非激发状态了.
所以当你执行
if(WaitForSingleObject(start,2000)==WAIT_TIMEOUT)
MessageBox("waitout!");
自然就是超时提示了.给分吧