57 lines
1.4 KiB
C++
57 lines
1.4 KiB
C++
#pragma once
|
|
|
|
/**************************************************************************************************
|
|
|
|
작성일: 2008-07-15
|
|
작성자: 문상현 (youngmoon@webzen.co.kr)
|
|
|
|
설명: IOCP 를 이용하여 스레드POOL 을 지원한다.
|
|
|
|
**************************************************************************************************/
|
|
|
|
#define MAX_THREAD_COUNT 32
|
|
#define IOCPTHREAD_CLOSE -1
|
|
|
|
#include <Windows.h>
|
|
#include <process.h>
|
|
|
|
#include <vector>
|
|
|
|
#include "WorkerThread.h"
|
|
|
|
class CWorkerThreadPool
|
|
{
|
|
public:
|
|
CWorkerThreadPool();
|
|
~CWorkerThreadPool();
|
|
|
|
// 스레드 풀을 생성한다.
|
|
bool CreateThreadPool(DWORD dwThreadCnt);
|
|
// 스레드 풀을 종료한다.
|
|
void DestoryThreadPool();
|
|
// 작업을 추가한다.
|
|
BOOL AddJob(CWorkerThread* pWorker);
|
|
// 스레드을 생성한다.
|
|
void AddJobThread(CWorkerThread* pWorker);
|
|
// 모든 작업 스레드를 정지 시킨다.
|
|
void AllStopJobThread();
|
|
// 등록된 모든 스레드를 호출한다.
|
|
void OnTimr(HANDLE hRequest, DWORD dwRequest);
|
|
|
|
private:
|
|
// IOCP 메인 핸들
|
|
HANDLE m_hIOCP;
|
|
// 스레드 프로시져의 핸들
|
|
HANDLE m_hThread[MAX_THREAD_COUNT];
|
|
// 스레드 수
|
|
DWORD m_dwThreadCount;
|
|
|
|
// 작업 POOL 스레드 프로시져
|
|
static UINT __stdcall WorkThreadProc( LPVOID parameter );
|
|
// 세션 POOL 스레드 프로시져
|
|
static UINT __stdcall SessionThreadProc( LPVOID parameter );
|
|
|
|
//작업스레드 컨테이너
|
|
std::vector<CWorkerThread*> m_vecThread;
|
|
typedef std::vector<CWorkerThread*>::iterator WorkerIter;
|
|
}; |