您的位置:首页 > 其它

如何在多线程之间传递socket

2007-05-24 16:52 141 查看
有些特殊情况下,可能需要在不同线程之间传递socket。当然我不建议在使用CAsyncSOcket的时候这么做,因为这增加了出错的风险(尤其当出现拆解包问题时,有人称为粘包,我基本不认同这种称呼)。如果一定要这么做,方法应该是:

当前拥有这个socket的线程调用Detach方法,这样socket句柄和C++对象及当前线程脱离关系

当前线程把这个对象传递给另外一个线程

另外一个线程创建新的CAsyncSocket对象,并调用Attach

上面的例子,我稍微做修改,就不会出错了:

CAsyncSocket Socket;
UINT Thread(LPVOID sock)
{
Socket.Attach((SOCKET)sock);
Socket.Close ();
return 0;
}
void CTestSDlg::OnOK()
{
// TODO: Add extra validation here
Socket.Create(0);
SOCKET hSocket = Socket.Detach ();
AfxBeginThread(Thread,(LPVOID)hSocket,0,0,0,0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: