Files
DBService/ComposeService/IOCmpltThread.h
T
2026-07-09 11:27:59 +08:00

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_