GetQueuedCompletionStatus 返回0,WSAGetLastError() = 998

hanhengbo 2014-03-26 04:36:48
自己写了一个用完成端口处理消息队列的程序,创建完成端口都成功,
就是在线程里 GetQueuedCompletionStatus 返回都是0,WSAGetLastError() = 998

创建代码:

m_hCompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 1);
if (NULL == m_hCompletionPort)
{
throw TEXT("数据队列实例异常,启动失败");
}
if (false == m_QueueServiceThread.InitThread(m_hCompletionPort))
{
throw TEXT("队列对象线程初始化失败");
}
if(false == m_QueueServiceThread.StartThread())
{
throw TEXT("数据队列对象线程初始化失败");
}


消息队列线程代码:

bool CQueueServiceThread::InitThread(HANDLE hCompletionPort)
{
ASSERT(IsRuning() == false);
ASSERT(m_hCompletionPort == NULL);

m_hCompletionPort = hCompletionPort;

return true;
}

bool CQueueServiceThread::UnInitThread()
{
ASSERT(IsRuning() == false);

m_hCompletionPort = NULL;

return true;
}

bool CQueueServiceThread::OnEventThreadRun()
{
ASSERT(NULL != m_hCompletionPort);

DWORD dwTransferred = 0;
OVERLAPPED * pOverlapped = NULL;
tagDataQueue * pDataQueue = NULL;

BOOL bSuccess = GetQueuedCompletionStatus(m_hCompletionPort, &dwTransferred, (PULONG_PTR)pDataQueue, &pOverlapped, INFINITE);

if (bSuccess)
{
ASSERT(FALSE);
if (NULL == pDataQueue)
{
return false;
}

....

return true;
}
else
{
TRACE2("\r\n CQueueServiceEngine %d %d", bSuccess, WSAGetLastError());
}

return false;
}


求大伙帮忙看看,什么问题
...全文
269 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
longxiao1986 2015-07-09
  • 打赏
  • 举报
回复
BOOL bSuccess = GetQueuedCompletionStatus(m_hCompletionPort, &dwTransferred, (PULONG_PTR)&pDataQueue, &pOverlapped, INFINITE);
yaozhiyong110 2014-03-27
  • 打赏
  • 举报
回复
你网上搜下例子 看别人是怎么写的...
yaozhiyong110 2014-03-27
  • 打赏
  • 举报
回复
OVERLAPPED pOverlapped = NULL; tagDataQueue * pDataQueue = NULL; BOOL bSuccess = GetQueuedCompletionStatus(m_hCompletionPort, &dwTransferred, (PULONG_PTR)pDataQueue, &pOverlapped, INFINITE);

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧