以下代码片段说明了在消息循环中使用MsgWaitForMultipleObjects函数。
int MessageLoop
HANDLE* lphObjects, //需要等待的句柄
int cObjects //等待的句柄数
)
{
//消息循环持续到我们得到一个WM_QUIT消息,
//我们将从函数返回。
while(TRUE)
{
//块局部变量
DWORD result ;
//等待发送或发布到此队列的任何消息
//或其中一个传递的句柄设置为发信号。
result = MsgWaitForMultipleObjects(cObjects, lphObjects,
FALSE, INFINITE, QS_ALLINPUT);
//结果告诉我们我们拥有的事件类型。
if (result == (WAIT_OBJECT_0 + cObjects))
{
//块局部变量
MSG msg ;
//读取下一个循环中的所有消息,
//在我们阅读时删除每条消息。
while(PeekMessage(& msg,NULL,0,0,PM_REMOVE)){
//如果这是一个退出的消息,我们离开了这里。
if (msg.message == WM_QUIT)
return 1;
//否则,调度消息。
DispatchMessage(&msg);
} //结束PeekMessage while循环。
}
else {
//其中一个手柄发出信号。
DoStuff (result - WAIT_OBJECT_0) ;
} //结束else子句。
} //总是while循环结束。
} //功能结束