На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

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);
} // Конец еще статьи.
} // Конец всегда пока цикл.

} // Конец функции.



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz