error C3867: 'CMySocket::ServerReadProc': function call missing argument list;

firecityplans 2011-04-17 03:40:47
如何在类中创建线程?

我在一个类中这样做:
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


不知道怎样处理,。
请教!
...全文
183 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
firecityplans 2011-04-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 arong1234 的回复:]
普通类成员函数不得做线程入口,因为它隐藏的this指针参数你无法传给它
[/Quote]

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


谢谢!
arong1234 2011-04-17
  • 打赏
  • 举报
回复
普通类成员函数不得做线程入口,因为它隐藏的this指针参数你无法传给它
firecityplans 2011-04-17
  • 打赏
  • 举报
回复
是不是使用_beginthreadex()函数不能使用本身的类指针this做为参数?
firecityplans 2011-04-17
  • 打赏
  • 举报
回复
初学在类中实现线程,请各位大侠指教啊!

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧