예제 #1
0
파일: IOCP.cpp 프로젝트: netscane/WebSpider
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;
}
예제 #2
0
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);
}
예제 #3
0
파일: IOCP.cpp 프로젝트: netscane/WebSpider
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");
}
예제 #4
0
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);
}