iocp.cpp#include "stdafx.h"
#include "iocp.h"
#include <stdio.h>CIocp::CIocp()
{
mhIocp = NULL;
}CIocp::~CIocp()
{
if(mhIocp != NULL)
{
CloseHandle(mhIocp);
mhIocp = NULL;
}
//WSACleanup();
}int CIocp::Open()
{
//WSADATA lwsaData;
//WSAStartup(MAKEWORD(2,2),&lwsaData);
mhIocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,NULL,0);
if(mhIocp == NULL)
{
printf("CreateIoCompletionPort error\r\n");
return -1;
}
return 0;
}HANDLE CIocp::GetHandle()
{
return mhIocp;
}
#include "stdafx.h"
#include "iocp.h"
#include <process.h>
#include <stdio.h>BOOL WINAPI ControlHandler(DWORD adwCtrlType);
CIocp * goIocp;
bool gbRun = true;
unsigned int __stdcall WorkThread(void *);int main(int argc, char* argv[])
{
SetConsoleCtrlHandler(ControlHandler, TRUE);
SetConsoleTitle("test"); goIocp = new CIocp;
goIocp->Open(); _beginthreadex(NULL,0,WorkThread,goIocp,NULL,0);
while(1)
{
Sleep(10);
}
return 0;
}unsigned int __stdcall WorkThread(void * argu)
{
CIocp * lpIocp = (CIocp*)argu;
int liRet;
LPOVERLAPPED lpOverleppad;
DWORD ldw;
while(gbRun)
{
liRet = GetQueuedCompletionStatus(lpIocp->GetHandle(),&ldw,NULL,&lpOverleppad,0);
if(lpOverleppad == NULL)
{
printf("lpOverleppad == NULL\r\n");
break;
}
if(liRet == 0)
{
printf("liRet == 0\r\n");
break;
}
}
return 0;
}BOOL WINAPI ControlHandler(DWORD adwCtrlType)
{
switch (adwCtrlType)
{
case CTRL_C_EVENT: case CTRL_BREAK_EVENT: case CTRL_CLOSE_EVENT:
//增加自己的处理代码
gbRun = false;
Sleep(100);
delete goIocp;
break; case CTRL_LOGOFF_EVENT: case CTRL_SHUTDOWN_EVENT:

break;
}
// 必须返回FALSE,否则回出现非法操作
return FALSE;
}
为什么GetQueuedCompletionStatus时,马上就返回,并且lpOverleppad为空,可liRet 却是非0的。错误代码是998。哪位能帮我分析分析!谢谢!