100分解决多线程通信服务端中的内存问题,急!

richardxulf 2002-09-10 05:17:43
我在一个多线程处理的服务端程序中,使用了CSocket类。
首先,侦听端口。如果有连接请求被Accept,则转入到新的线程取处理。
while(1)
{
CSocket nsock;
SOCKET tsock;
i=sizeof(sockaddr);
if(listen_socket.Accept(nsock,&nfrm,&i)!=0)
{
tsock=nsock.Detach();
if(AfxBeginThread(ReceviceProc,(void *)tsock)==NULL)
{
nsock.Close();
}
else
{
。。。
}
nsock.Close();
}
}
在处理线程ReceiveProc中,重新定义一个CSocket对象sock,sock.Attach((SOCKET)nPara)),在处理线程退出时,sock.Close(),但是,最近发现有内存问题,即在任务管理器中发现内存在4k的增加,但是,我该关闭的东西全部都关闭了。通过内存监测工具检查不出来。VC中的Debug页检查不出。请高手指点。
...全文
89 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
richardxulf 2002-09-11
  • 打赏
  • 举报
回复
可是内存一直在往上涨,作了几个交易以后,就会增加个4k,难道任务管理器回出错?
richardxulf 2002-09-11
  • 打赏
  • 举报
回复
关闭俩次, 没有出错呀。
yongdu 2002-09-11
  • 打赏
  • 举报
回复
nsock.Detach();后再nsock.Close();行吗?
就是不知道Detach()有没有把句柄置为空.最好还是
CloseHandle(tsock)吧。

还有,你两次nsock.Close()要出错吧。套接字是内核对象,关闭两次要出错的。
javanew 2002-09-10
  • 打赏
  • 举报
回复
是不是每次运行都增加4K,并不减少
siphonelee 2002-09-10
  • 打赏
  • 举报
回复
任务管理器中内存的增加可能是因为系统对进程的调度引起的
我觉得你的程序应该不存在内存泄漏
如果不放心再用BoundChecker查一下

15,471

社区成员

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

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