Выводим принятую строку на консоль
GetLastError());
getch();
break;
}
// Если в канале есть Mailslot сообщения,
// читаем первое из них и выводим на экран
if(cbMsgNumber != 0)
{
if(ReadFile(hMailslot, szBuf, 512, &cbRead, NULL))
{
// Выводим принятую строку на консоль
printf("Received: <%s>\n", szBuf);
// Если пришла команда "exit",
// завершаем работу приложения
if(!strcmp(szBuf, "exit"))
break;
}
else
{
fprintf(stdout,"ReadFile: Error %ld\n",
GetLastError());
getch();
break;
}
}
// Выполняем задержку на 500 миллисекунд
Sleep(500);
}
// Перед завершением приложения закрываем
// идентификатор канала Mailslot
CloseHandle(hMailslot);
return 0;
}
Прежде всего, серверное приложение создает канал Mailslot, пользуясь для этого функцией CreateMailslot:
hMailslot = CreateMailslot(lpszMailslotName, 0,
MAILSLOT_WAIT_FOREVER, NULL);
Далее запускается цикл, в котором после определения состояния канала выполняется чтение сообщений из него (при условии, что в канале есть сообщения). Для проверки состояния канала мы используем функцию GetMailslotInfo.
Сообщение читается функцией ReadFile:
ReadFile(hMailslot, szBuf, 512, &cbRead, NULL);
После чтения перед выполнением очередной проверки состояния приложение выполняет задержку, вызывая для этого функцию Sleep:
Sleep(500);
Задержка необходима для того, чтобы ожидание сообщения в цикле не отнимало слишком много системных ресурсов у других приложений.
Перед завершением работы приложения мы закрываем идентификатор канала Mailslot с помощью функции CloseHandle:
CloseHandle(hMailslot);
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий