📄 rsthread.h
字号:
// The following ifdef block is the standard way of creating macros which make exporting
// from a DLL simpler. All files within this DLL are compiled with the RSTHREAD_EXPORTS
// symbol defined on the command line. this symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see
// RSTHREAD_API functions as being imported from a DLL, wheras this DLL sees symbols
// defined with this macro as being exported.
#ifdef RSTHREAD_EXPORTS
#define RSTHREAD_API __declspec(dllexport)
#else
#define RSTHREAD_API __declspec(dllimport)
#endif
#include "winsock2.h"
long g_nTotalConnections;
long g_nCurrentConnections;
typedef struct _SOCKET_OBJ //定义套接字对象
{
SOCKET s; //套接字句柄
HANDLE event; //与此套接字相关联的事件对象句柄
sockaddr_in addrRemote; //客户端地址信息
_SOCKET_OBJ *pNext; //指向下一个对象,以连接成一个表
}SOCKET_OBJ,*PSOCKET_OBJ;
typedef struct _THREAD_OBJ
{
HANDLE event[WSA_MAXIMUM_WAIT_EVENTS]; //定义线程对象
int nSocketCount; //记录当前线程要等待的事件对象的句柄
PSOCKET_OBJ pSockHeader; //指向当前线程处理的套接字对象列表的表头
PSOCKET_OBJ pSockTail; //指向当前线程处理的套接字对象列表的表尾
CRITICAL_SECTION cs; //关键代码段变量,同步对本结构的访问
_THREAD_OBJ *pNext; //指向下一个对象,以连接成一个表
}THREAD_OBJ,*PTHREAD_OBJ;
CRITICAL_SECTION g_cs;
PTHREAD_OBJ g_pThreadList;
PSOCKET_OBJ GetSocketObj(SOCKET s); //申请一个套接字对象并初始化
void FreeSocketObj(PSOCKET_OBJ pSocket); //释放一个套接字对象
PTHREAD_OBJ GetThreadObj(); //申请一个线程对象并初始化
void FreeThreadObj(PTHREAD_OBJ pThread); //释放一个线程对象
BOOL InsertSocketObj(PTHREAD_OBJ pThread,PSOCKET_OBJ pSocket); //向一个线程的套接字列表中插入一个套接字
void AssigToFreeThread(PSOCKET_OBJ pSocket); //将一个套接字安排给空闲的线程处理
void RebuildArray(PTHREAD_OBJ pThread);
void RemoveSocketObj(PTHREAD_OBJ pThread,PSOCKET_OBJ pSocket); //从给定线程的套接字对象列表中移除一个套接字对象
DWORD WINAPI ServerThread(LPVOID lpParam); //处理线程
PSOCKET_OBJ FindSocketObj(PTHREAD_OBJ pThread,int nIndex);
BOOL HandleIO(PTHREAD_OBJ pThread,PSOCKET_OBJ pSocket);
extern "C" RSTHREAD_API DWORD StartSocket();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -