- 25
- 0
- 约3.41千字
- 约 4页
- 2017-12-20 发布于河南
- 举报
Socket不能跨线程
现象
用多线程方法设计socket程序时,你会发现在跨线程使用CAsyncSocket及其派生类时,会出现程序崩溃。所谓跨线程,是指该对象在一个线程中调用Create/AttachHandle/Attach函数,然后在另外一个线程中调用其他成员函数。下面的例子就是一个典型的导致崩溃的过程:
CAsyncSocket Socket;
UINT Thread(LPVOID)
{
Socket.Close ();
return 0;
}
void CTestSDlg::OnOK()
{
// TODO: Add extra validation here
Socket.Create(0);
AfxBeginThread(Thread,0,0,0,0,0);
}
其中Socket对象在主线程中被调用,在子线程中被关闭。
跟踪分析
这个问题的原因可以通过单步跟踪(F11)的方法来了解。我们在Socket.Create(0)处设断点,跟踪进去会发现下面的函数被调用:
void PASCAL CAsyncSocket::AttachHandle(
SOCKET hSocket, CAsyncSocket* pSocket, BOOL bDead)
{
_AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState;
BOOL bEnable = A
您可能关注的文档
最近下载
- 2025湖北襄阳老河口市清源供水有限公司招聘5人备考题库附答案详解.docx VIP
- 表面贴装技术基础知识培训.ppt VIP
- 放线滑车检测报告+合格证.pdf VIP
- 变电站入侵生物综合管理规程.pdf VIP
- T∕CPCACN 0021-2025 制药企业有害生物防制管理指南.pdf VIP
- 2026鹿邑县人民医院招聘护理专业人员60人考试参考题库及答案解析.docx VIP
- IEC 61260 电声学——倍频程和分数倍频程滤波器+源标准.pdf VIP
- 物流园区有害生物防制服务指南.pdf VIP
- 工业装备易损部件再制造项目可研.pdf VIP
- GB . 家用和类似用途电器的安全 电击动物设备的特殊要求.docx VIP
原创力文档

文档评论(0)