55 lines
1.2 KiB
C++
55 lines
1.2 KiB
C++
#ifndef IOCmpltThreadH
|
|
#define IOCmpltThreadH
|
|
|
|
#include <winsock2.h>
|
|
#include <list>
|
|
#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_
|