主程序关闭时,工作者线程阻塞在UDP阻塞接收函数中致线程被非正常释放后DEBUG输出窗口提示内存泄露的问题?

kgduwu 2010-07-17 01:10:54
程序在主框架窗口中创建了一个无界面Worker线程来while(!bExitFlag){}循环接收来自SOCKET的UDP数据,UDP数据接收函数采用的是阻塞方式接收,因此如果SOCKET没有UDP数据被接收,工作者线程将被总是阻塞在接收函数处,此时即便主窗口线程已经被用户点击了关闭按钮,bExitFlag退出标志被置位为退出,并且Sleep(100);等待工作者线程退出后再退出,工作者线程仍没有机会退出。而Sleep(100);后因为进程被关闭(主窗口线程被关闭),所以工作者线程被非正常释放。
所以:在VS2008的DEBUG输出生成窗口中提示:
etected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\thrdcore.cpp(306) : {141} client block at 0x0038F688, subtype c0, 68 bytes long.
a CWinThread object at $0038F688, 68 bytes long
Object dump complete.

这种问题怎么处理?
据说进程退出后,它将释放它占用的所有资源,也就意味着即使上述内存泄露提示即便存在,在处理不了或不处理的情况下程序永远也不会因为这个问题而在运行过程中出现错误?可以不必理会该提示?
...全文
205 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
kourbeck 2011-08-05
  • 打赏
  • 举报
回复
udp接收线程没有退出,导致内存泄露了。
  • 打赏
  • 举报
回复
CloseSocket()

15,466

社区成员

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

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