Асинхронная операция чтения на именованном канале?

Я хочу получать данные по именованному каналу асинхронно. Ниже приведен код моего сервера:

bool bContinue = true;
bool bMessageReceived = false;
int iMessage;
DWORD dwBytesRead = 0;
OVERLAPPED oReadOverlapped = {0};
oReadOverlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

while(bContinue)
{
    int result = ReadFile(hPipe, &iMessage, sizeof(int), NULL, &oReadOverlapped);
    int dwError = GetLastError();
    cout<< "readFile Error: " << dwError <<endl; 
    if( result )
        bMessageReceived = true;
    else
    {
       bool ret = GetOverlappedResult(hPipe, &oReadOverlapped, &dwBytesRead,                    
                     FALSE); 
       if( ret )
       {
           bMessageReceived = true;
       }
       else
       {
        dwError = GetLastError();
        cout<< "GetOverlappedResult Error: "<<dwError <<endl;
        bMessageReceived = !( !ret && dwError == ERROR_IO_INCOMPLETE);
       }
   }

   if( bMessageReceived )
   {
       ResetEvent(oReadOverlapped.hEvent);
       ProcessMessage(iMessage, hPipe);
   }

   bContinue = !IsServerStopped();
 }

Код клиента отправляет сообщение "синхронно" с успехом. Но каждый раз, когда сервер вызывает readFile, он возвращается с ERROR_IO_PENDING, а GetOverlappedResult возвращается с ERROR_IO_INCOMPLETE. Это продолжается в цикле. Я использую Windows Vista и Visual Stdio 2010. в чем может быть проблема с этим кодом.

С уважением, Хуррам.

0 ответов

Другие вопросы по тегам