等待讯息循环

【勇芳软件工作室】汉化HomePreviousNext

以下代码片段说明了在消息循环中使用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循环结束。

} //功能结束