如何在类中创建线程?我在一个类中这样做:
class CMySocket
{
public:
CMySocket(void);
~CMySocket(void);public:
DWORD CALLBACK ServerReadProc(LPVOID lpVoid );

private:
CString m_strReply;
CString m_strRequest;
HANDLE m_pThread;
int m_nPort;
};
创建类线程的函数如下:
void CMySocket::SocketServer( int nPort, LPCSTR szReply )
{
m_strReply = szReply;
m_nPort = nPort;
DWORD dwThreadId;
m_pThread =CreateThread(NULL, 0, ServerReadProc,this, 0, &dwThreadId);
}
DWORD CALLBACK CMySocket::ServerReadProc(LPVOID lpVoid )
{
CMySocket *Parent = ( CMySocket *)lpVoid;
SOCKET WinSocket = INVALID_SOCKET; //Window 套接字
SOCKET ClientSocket = INVALID_SOCKET; //用于通信的套接字 SOCKADDR_IN accept_sin; //接收连接体的地址
int accept_sin_len;
accept_sin_len = sizeof(accept_sin);
WinSocket = dealsocket.Listening(Parent->m_nPort );
        }对这个类编译时出现如标题中所出现的错误:
CMySocket::ServerReadProc': function call missing argument list; use '&CMySocket::ServerReadProc' to create a pointer to member
不知道怎样处理,。
请教!

解决方案 »

  1.   

    是不是使用_beginthreadex()函数不能使用本身的类指针this做为参数?
      

  2.   

    普通类成员函数不得做线程入口,因为它隐藏的this指针参数你无法传给它
      

  3.   


    谢谢你的提醒,我打到问题的所在了,只需要把DWORD CALLBACK ServerReadProc(LPVOID lpVoid )函数前面加上"static”就可以 了,因为如果想在类的内部创建线程,则线程所调用的线程函数必须是全局函数或类的静态成员函数。
    谢谢!