//定义
class ESKT
{
public:
static void SAcceptThread(LPVOID pParam);
static void CAcceptThread(LPVOID pParam);
void Stop(ServerType l_type);
CString ShowErrorInfo();
bool LS(ServerType l_type,int l_lsnum);
ESKT();
virtual ~ESKT();
protected:
int ServerNum;
DWORD LastErrNo;
SOCKET l_pskt;
SOCKET l_cskt;
struct sockaddr_in l_sa;
};void ESKT::CAcceptThread(LPVOID pParam)
{}bool ESKT::LS(ServerType l_type,int l_lsnum)
{
//....
AfxBeginThread(CAcceptThread,(LPARAM)&l_cskt);//这是调用
}/*出错
E:\工作区\代理与打洞应用开发\EWProxyServer\ESKT.cpp(54) : error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'void (void *)'
????请问为什么
*/
class ESKT
{
public:
static void SAcceptThread(LPVOID pParam);
static void CAcceptThread(LPVOID pParam);
void Stop(ServerType l_type);
CString ShowErrorInfo();
bool LS(ServerType l_type,int l_lsnum);
ESKT();
virtual ~ESKT();
protected:
int ServerNum;
DWORD LastErrNo;
SOCKET l_pskt;
SOCKET l_cskt;
struct sockaddr_in l_sa;
};void ESKT::CAcceptThread(LPVOID pParam)
{}bool ESKT::LS(ServerType l_type,int l_lsnum)
{
//....
AfxBeginThread(CAcceptThread,(LPARAM)&l_cskt);//这是调用
}/*出错
E:\工作区\代理与打洞应用开发\EWProxyServer\ESKT.cpp(54) : error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'void (void *)'
????请问为什么
*/
参数和返回值都有限制
一般成员函数有隐藏的参数this
你这样定义应该是全局的吧.但如果我要把这个类独立出来,里面具要有线程处理该如何做呢?
类里能不能实现线程的功能.
{
DECLARE_DYNCREATE(CAsThread)public:
CAsThread(); // protected constructor used by dynamic creation
virtual ~CAsThread();public:
virtual BOOL InitWorkerThread();
virtual int ExitWorkerThread(); virtual BOOL Start(int nPriority = THREAD_PRIORITY_NORMAL);
virtual BOOL Stop(DWORD dwTimeOut = 1000);
virtual BOOL StopAsync();protected:
BOOL m_bWorkerInitialized;
HANDLE m_hStopEvent;
static UINT ThreadFunc(LPVOID lpParam); // 注意这里的线程函数
virtual UINT Go() { return 0;} // 注意这个函数protected:
DECLARE_MESSAGE_MAP()
};//线程函数的实现
UINT CAsThread::ThreadFunc(LPVOID lpParam)
{
UINT ret = 1; // invalid thread parameter
CAsThread * pAsThread = 0;
pAsThread = (CAsThread *)lpParam; // 参数为线程类对象指针,知道怎么作了吧
if(pAsThread)
{
ret = pAsThread->Go();
} return ret;
}
virtual int ExitWorkerThread(); virtual BOOL Start(int nPriority = THREAD_PRIORITY_NORMAL);
virtual BOOL Stop(DWORD dwTimeOut = 1000);
virtual BOOL StopAsync();
这是重载CWINTHREAD吗,可以不要吗?
你只要把
static UINT ThreadFunc(LPVOID lpParam); // 注意这里的线程函数
virtual UINT Go() { return 0;}
加到你的类里就可以了
static DWORD WINAPI SAcceptThread(LPVOID pParam);
static DWORD WINAPI CAcceptThread(LPVOID pParam);
当然也可以用全局函数