使用socket通讯时,服务器端使用多线程,在线程中使用自定义

l_chuanfei 2000-08-17 06:39:00
消息时,当接收消息太长时,出现错误,错误为:CSock::PumpMessage()中的
Assert(pstate->m_hSockWindow!=NULL),当接收消息短,没任何问题,大侠帮帮我
...全文
196 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcbeginner 2000-08-18
  • 打赏
  • 举报
回复
用Daivid的思路一定要处理好发送超时和接受超时,超时错误后一定要中止该线程,否则你的线程会越来越多,直至资源耗尽。(实际上他就是线程递规)。
vcbeginner 2000-08-18
  • 打赏
  • 举报
回复
MFC的CSocket是异步的,用在多线程中很容易出问题,如果能用工作线程最好用工作线程。用API也没几句代码,Daivid得思路是:当服务方接受一个客户服务请求时就产生一个工作线程去处理,处理上有点递规的感觉。我用此思路从来没发现遗漏服务的现象,而且速度很快。你还是先看一下Daivid的思路。
l_chuanfei 2000-08-18
  • 打赏
  • 举报
回复
vcbeginner:
我用的是MFC标准类CSocket,有问题吗?你处理时遇到一些什么问题,能告诉我,让我借鉴一下吗,多谢了!!!!
vcbeginner 2000-08-18
  • 打赏
  • 举报
回复
>>
看看《VC++技术内幕》(第四版)第六章,Daivid为你封装了一个很好用的同步socket类,我以按照他的思路(没用他的类)运用在工控网络中传送实时监控数据。
>>
l_chuanfei 2000-08-18
  • 打赏
  • 举报
回复
我查看,是处理完本次接收消息处理,进入线程消息循环时出错的,请大侠们帮帮我,十万火急!!!!
l_chuanfei 2000-08-18
  • 打赏
  • 举报
回复
blind_man:
我加上后,还是出错!多谢了。我的线程不是工作者线程,而是用户接口线程,但是未使用窗口。
blind_man 2000-08-17
  • 打赏
  • 举报
回复
在多个线程中使用CSocket会出现问题,在线程的入口处添加下列代码或许能解决:
unsigned Thread(void* pvoid)
{
#ifndef _AFXDLL
// setup maps and lists specific to socket state
AFX_MODULE_THREAD_STATE* pState = AfxGetModuleThreadState();
if (pState->m_pmapSocketHandle == NULL)
pState->m_pmapSocketHandle = new CMapPtrToPtr;
if (pState->m_pmapDeadSockets == NULL)
pState->m_pmapDeadSockets = new CMapPtrToPtr;
if (pState->m_plistSocketNotifications == NULL)
pState->m_plistSocketNotifications = new CPtrList;
#endif
.......
}

15,472

社区成员

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

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