Я хочу получать данные по именованному каналу асинхронно. Ниже приведен код моего сервера:
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.
в чем может быть проблема с этим кодом.
С Уважением,
Khurram.
Задача ещё не решена.
Других решений пока нет …