不知怎么解决

supwjhuLoveCjj 2005-10-04 12:25:13
在主进程中的异步监听SOCKET(CAsyncSocket m_MainAsyncS)在监听到请求后,建立处理子线程(CWinThread m_SubThread), 并将子线程中的一个成员变量:阻塞SOCKET(CSocket SubSocket)直接作为Accept的参数(m_MainAsyncS.Accept(m_SubThread->SubSocket)), 在DEBUG中, 激活子线程后该阻塞SOCKET可以发送数据(m_SubThread.Send(sBuffer,sizeof(sBuffer))),但无法做阻塞接收(m_SubThread.Recive(rBuffer,sizeof(rBuffer),0)),如果在同一线程中(如都在主线程中)就不存在这样的问题,在DEBUG中给出的错误提示是:"File sockcore.cpp Line:850"编译(DEBUG模式)后给出的错误提示是:"File sockcore.cpp Line:336".
...全文
106 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
MuseIn 2005-10-04
  • 打赏
  • 举报
回复
首先是不应该在父进程中操作线程成员,因为WINDOWS的多任务特性使得线程之间独立运行,但是它们彼此共享虚拟空间。所以线程有可能会同时操作一片内存,类对象也是一片内存区域,这时会产生意外问题。如果要共同操作一个大尺寸变量你必须做好线程的同步。
你可以如下做试试:
CSocket *m_SubSocket;
m_SubSOcket=new CSocket;
MainSocket->Accetp(*m_SubSocket);
把m_SubSocket做为参数,在子线程启动时传递
AfxBeginThread(SubThread,(LPVOID)m_SubSocket)
也可以把套接口描述符作为参数。
还有要注意的是阻塞的socket调用必须考虑客户端的收发,如果客户端正处与接收阻塞,服务端也就没法接收了,而且线程的结束也很危险。

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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