|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Waiting in a Message Loop
The following code fragment illustrates the use of the MsgWaitForMultipleObjects function in a message loop.
int MessageLoop ( HANDLE* lphObjects, // handles that need to be waited on int cObjects // number of handles to wait on ) { // The message loop lasts until we get a WM_QUIT message, // upon which we shall return from the function. while (TRUE) { // block-local variable DWORD result ;
// Wait for any message sent or posted to this queue // or for one of the passed handles be set to signaled.
result = MsgWaitForMultipleObjects(cObjects, lphObjects, FALSE, INFINITE, QS_ALLINPUT);
// The result tells us the type of event we have. if (result == (WAIT_OBJECT_0 + cObjects)) { // block-local variable MSG msg ;
// Read all of the messages in this next loop, // removing each message as we read it. while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
// If it's a quit message, we're out of here. if (msg.message == WM_QUIT) return 1; // Otherwise, dispatch the message. DispatchMessage(&msg); } // End of PeekMessage while loop. } else { // One of the handles became signaled. DoStuff (result - WAIT_OBJECT_0) ; } // End of else clause. } // End of the always while loop.
} // End of function.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Ожидание в Цикле Сообщения
Кодовый фрагмент следующего иллюстрирует использование функции MsgWaitForMultipleObjects в цикле сообщения.
int MessageLoop ( РУЧКА* lphObjects, // ручки, что должно быть ожидано в количестве int cObjects // ручек, чтобы ожидать на ) { // Цикл сообщения продолжается пока мы не получим сообщение WM_QUIT, // на котором мы должны возвращать из функции. пока (ИСТИНА) { // блочный-локальный переменный результат DWORD;
// Ожидание любое сообщение посылало или объявлялось в эту очередь // или для одной из прошедших ручек установлен на сигнализированное.
произойдите = MsgWaitForMultipleObjects(cObjects, lphObjects, ЛОЖЬ, БЕСКОНЕЧНАЯ, QS_ALLINPUT);
// Результат сообщает мне тип случая мы имеем. если (происходить == (WAIT_OBJECT_0 + cObjects)) { // блочный-локальный msg переменной MSG;
// Прочитанные все сообщения в этом следующем цикле, // удалении каждого сообщения как мы прочитали это. пока (PeekMessage(&msg, НЕДЕЙСТВИТЕЛЬНЫЙ, 0, 0, PM_REMOVE)) {
// Если это - сообщение выхода, мы - из здесь. если возврат (msg.message == WM_QUIT) 1; // В противном случае, пошлите сообщение. DispatchMessage(&msg); } // Конец PeekMessage пока цикл. } еще { // Одна из ручек становились сигнальными. DoStuff (РЕЗУЛЬТАТ - WAIT_OBJECT_0); } // Конец еще статьи. } // Конец всегда пока цикл.
} // Конец функции.
|
|
|
|
| |