18,356
社区成员
发帖
与我相关
我的任务
分享
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;
}