?? 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 + -