📄 hlistener.h
字号:
#ifndef H_LISTENER_H
#define H_LISTENER_H 1
//////////////////////////////////////////////////////////////////////////////
//文件名 : HListener.h
//功能 : 监听线程类,应用于Windows 和 Linux两种系统
//创建/修改日期 : 2003.11.27
//作者 : 韩国静
//
/////////////////////在指定的端口开始监听线程,每当有连接来到就调用回调函数/////////////////
#include "HTcpSock.h"
#include "UniThread.h"
#include "HListenerCall.h"
class HListener
{
UNI_Semaphore m_Semaphore;
UNI_ThreadHandle m_RunThread;
CHTcpSock m_Sock;
UNI_BOOL m_Stop;
void *m_pCallParam;
//UNI_BOOL (*m_pDataCall)(CHTcpSock *pAccepted,void * dwCallParam);
HLISTENERCALLBACK m_pDataCall;
static UNI_THREADPROC RecvThread(void * param)
{
CHTcpSock net;
HListener*pThis=(HListener*)param;
UNI_BOOL bConnect;
if(pThis)
{
bConnect=net.AcceptConnect(&pThis->m_Sock);
UNI_ReleaseSemaphore(pThis->m_Semaphore);
if(bConnect)
{
pThis->m_pDataCall(&net,pThis->m_pCallParam);
net.Close();
}
}
UNI_ExitThread(0);
};
static UNI_THREADPROC RunThread(void * param)
{
UNI_ThreadHandle hThread;
UNI_ThreadID dwID;
HListener*pThis=(HListener*)param;
while(UNI_FALSE==pThis->m_Stop)
{
if(UNI_CreateThread(RecvThread,param,&hThread,&dwID))
{
UNI_CloseThreadHandle(hThread);
UNI_WaitSemaphore(pThis->m_Semaphore);
}
else
UNI_Sleep(20);
}
UNI_ExitThread(0);
};
public:
//在指定的端口开始监听线程,每当有连接来到就调用回调函数
UNI_BOOL Start(UNI_IN HLISTENERCALLBACK pCall,UNI_IN void *pVoid,UNI_IN UNI_WORD wPort)
{
m_Stop=UNI_FALSE;
m_pDataCall=pCall;
m_pCallParam = pVoid;
UNI_ThreadID dwId;
if(m_pDataCall)
{
if(UNI_CreateSemaphore(&m_Semaphore,0))
{
if(m_Sock.ListenAt(wPort,200))
{
if(UNI_CreateThread(RunThread,this,&m_RunThread,&dwId))
return UNI_TRUE;
m_Sock.Close();
}
UNI_CloseSemaphore(m_Semaphore);
}
}
m_Stop=UNI_TRUE;
return UNI_FALSE;
};
//停止监听线程
void End()
{
if(m_Stop==UNI_FALSE)
{
m_Stop=UNI_TRUE;
m_Sock.Close();
UNI_WaitCloseThread(m_RunThread);
UNI_CloseSemaphore(m_Semaphore);
}
};
///////////////////////////////////////////////////////////////////////
HListener(void){};
~HListener(void){};
};
#endif //H_LISTENER_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -