Программирование для Windows NT (том 2)



         

Приложение MSLOTS - часть 2


        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);




Содержание  Назад  Вперед