📄 peerthread.h
字号:
// PeerThread.h: interface for the PeerThread.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_PEERTHREAD_H__12D64605_CFE3_4901_B149_2CE33A1DF729__INCLUDED_)
#define AFX_PEERTHREAD_H__12D64605_CFE3_4901_B149_2CE33A1DF729__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "process.h"
#include "command.h"
/////////////////////////////////////////////////////
#define CUR_THREADID GetCurrentThreadId()
typedef unsigned (__stdcall *PTHREAD_START)(void*);
//定义创建线程函数,以简化代码的书写
#define BeginPeerThread(pfnStartAddr,pvParam,pdwThreadID)\
((HANDLE)(_beginthreadex((void*)NULL,\
0,\
(PTHREAD_START)(pfnStartAddr),\
(void*)(pvParam),\
0,\
(unsigned*)(pdwThreadID)\
)\
)\
)
#define EndPeerThread(retVal) _endendthreadex((unsigned)retVal)
///////////////////////////////////////////////////////
typedef struct tagConnectThread
{
HANDLE hThread; //线程句柄
UINT threadID; //线程ID
}CONNECTTHREAD;
typedef struct tagConnectSocket
{
SOCKET socket; //连接Socket
char IP[64]; //IP地址,为了兼容IP6
}CONNECTSOCKET;
//用户list查找时使用的比较函数
struct IDCompare:binary_function<CONNECTTHREAD,unsigned int, bool>
{
bool operator()(const CONNECTTHREAD& _X, const unsigned int& _Y) const
{
return (_X.threadID == _Y);
}
};
typedef list<CONNECTTHREAD> CONNECTTHREADLIST; //客户连接线程列表
typedef list<HANDLE> UNUSEDTHREADLIST; //不用的线程句柄列表
UINT WINAPI AcceptThread(PVOID pParam);
UINT WINAPI ServerThread(PVOID pParam);
UINT WINAPI CleanupThread(PVOID pParam);
////////////////////////////////////////////
extern CONNECTTHREADLIST listConnectThread; //客户连接线程列表
extern UNUSEDTHREADLIST listUnusedThread; //不用的线程句柄列表
extern CRITICAL_SECTION csProtectList; //只允许一个线程访问这些列表
//////////////////////////////////////////
void DeleteThread(DWORD dwThreadID);
#endif // !defined(AFX_PEERTHREAD_H__12D64605_CFE3_4901_B149_2CE33A1DF729__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -