CEvent g_Async;
Thread1()
{
g_Async.SetEvent();
}
Thread2
{
if(WAIT_OBJECT_0==WaitForSingleObject(g_Async.m_hObject,1))//1ms
dosomething1();
dosomething2();
}
如果dosomething1()和dosomething2()耗时较长,而这期间Thread1中执行了多次SetEvent();Thread2中WaitForSingleObject还能一次不少的得到这些事件吗?会不会丢失?
类似地,OnMessage()耗时较长,这期间PostMessage多次,OnMessage()还能一次不少的得到这些消息吗?会不会丢失?
Thread1()
{
g_Async.SetEvent();
}
Thread2
{
if(WAIT_OBJECT_0==WaitForSingleObject(g_Async.m_hObject,1))//1ms
dosomething1();
dosomething2();
}
如果dosomething1()和dosomething2()耗时较长,而这期间Thread1中执行了多次SetEvent();Thread2中WaitForSingleObject还能一次不少的得到这些事件吗?会不会丢失?
类似地,OnMessage()耗时较长,这期间PostMessage多次,OnMessage()还能一次不少的得到这些消息吗?会不会丢失?
OnMessage一般情况下是可以收到的,因为你的消息会排队处理,但postmessage是立即返回的,从它的返回值是无法判断消息是否已响应了的.
多次setevent 不一定会收到多次的信号除非你reset event及时
================
你都已经执行到dosomething1()了,WaitForSingleObject已经从阻塞状态中解除过来了,怎么还能得到通知呢?WaitForSingleObject都已经执行结束了。
超时的话则执行dosomething2();