bool CIOCP::_InitializeIOCP() { // 建立第一个完成端口 m_hIOCompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0 ); if ( NULL == m_hIOCompletionPort) { this->_LogInfo(_T("建立完成端口失败!错误代码: %d!\n"), WSAGetLastError()); return false; } m_nThreads = WORKER_THREADS_PER_PROCESSOR * _GetNoOfProcessors(); m_phWorkerThreads = new HANDLE[m_nThreads]; DWORD nThreadID; for (int i = 0; i < m_nThreads; i++) { THREADPARAMS_WORKER* pThreadParams = new THREADPARAMS_WORKER; pThreadParams->pIOCPModel = this; pThreadParams->nThreadNo = i+1; m_phWorkerThreads[i] = ::CreateThread(0, 0, _WorkerThread, (void *)pThreadParams, 0, &nThreadID); } _LogInfo(L" 建立 _WorkerThread %d 个.\n", m_nThreads ); return true; }
bool CLogThread::queueLog(const char *user, const char *realm, const char *peer, const char* serviceName,const char* GUID, int RecordsReturned, IPropertyTree& logInfo) { IArrayOf<IEspLogInfo> LogArray; addLogInfo(LogArray, logInfo); LOG_INFO _LogInfo(serviceName,GUID, RecordsReturned,false); return queueLog(user, realm, peer, _LogInfo, LogArray); }
void CIOCP::_DeInitialize() { // 删除客户端列表的互斥量 DeleteCriticalSection(&m_csContextList); // 关闭系统退出事件句柄 RELEASE_HANDLE(m_hShutdownEvent); // 释放工作者线程句柄指针 for( int i=0;i<m_nThreads;i++ ) { RELEASE_HANDLE(m_phWorkerThreads[i]); } RELEASE(m_phWorkerThreads); // 关闭IOCP句柄 RELEASE_HANDLE(m_hIOCompletionPort); _LogInfo(L"释放资源完毕.\n"); }
bool CLogThread::queueLog(IEspContext & context,const char* serviceName,const char* GUID, int RecordsReturned, IPropertyTree& logInfo) { LOG_INFO _LogInfo(serviceName,GUID, RecordsReturned,false); IArrayOf<IEspLogInfo> LogArray; return queueLog(context,_LogInfo, LogArray, logInfo); }