#ifndef IOCmpltThreadH #define IOCmpltThreadH #include #include #include "Thread.h" #define PORT 12071 #define DATA_BUFSIZE 8192 #define MAX_PROCESSOR_COUNTER 22 //最多定义22个处理器 enum SERVER_COMPLETE_KEY { COMPLETION_KEY_RECV = 0, COMPLETION_KEY_SEND = 1, COMPLETION_KEY_SHUTDOWN = 2, }; typedef struct { SERVER_COMPLETE_KEY iOperation; int nTimeCount; SOCKET socket; OVERLAPPED overlapped; WSABUF dataBuf; char buffer[DATA_BUFSIZE]; unsigned int peerIp; unsigned short peerPort; } CONTEXT_KEY, * LPCONTEXT_KEY; using namespace std; typedef list< LPCONTEXT_KEY > CONTEXTKEYLIST; class CIOCmpltThread : public CThread { public: void Main(); CIOCmpltThread(unsigned int nStackSize); virtual void Terminate(); bool IsValidContextKey( LPCONTEXT_KEY lpContextKey ); void FreeContextKey( LPCONTEXT_KEY lpContextKey ); void OnTimer(); private: SOCKET m_hListenSocket; HANDLE m_hWorkerThread[MAX_PROCESSOR_COUNTER]; int m_nWorkerThreadNumbers; CSema m_smProcess; CONTEXTKEYLIST m_lstContextKeys; }; DWORD WINAPI ServerWorkerThread(LPVOID CompletionPortID); #endif //_IOCMPLTTHREAD_H_