MFC 用afxbeginthread创建线程 线程函数直接 return 0 返回。任务管理器显示线程数与理论值不符
来源:互联网 发布:怎么快速成为淘宝达人 编辑:程序博客网 时间:2024/05/29 04:01
一个MFC做的服务器在winsever 2003上跑了3个星期,今天突然发现CPU占用率80%+,200多个线程。但实际连接应有的线程应该只有20+,猜测长时间运行后,系统貌似并没有释放掉线程资源
做了一下几个实验来验证:
1、重启进程,启动后CPU占用率0%,说明代码逻辑并无问题,因为每个线程的代码都是一样的
2、做了一个demo在本地模拟运行
demo流程:1、在UI线程用afxbeginthread启动一个work线程
2、在1的work线程中循环调用afxbeginthread再启动10个work线程
3、在2启动的10个work线程(定名为work_m)中,线程函数都直接 return 0
4、在2启动完10个work线程(定名为work_s)之后,进入死循环一直Sleep
运行结果: 1、在2进入sleep之后,打开任务管理器发现该进程的线程数在变化,有时候变大,有时候变小,但都比2大(2应该是这时候的线程数)
2、更改2中代码,每启动一个work_s线程之后等待 5s用GetExitcodeThread(hthread,&exitcode)检查线程是否已退出,返回都是 未退出
试验过各种方法和更改代码之后,发现任务管理器显示的线程数还是和理论值对不上,于是重启PC,重启后重新运行demo(demo代码未更改),发现 任务管理器 显示的线程数正常了。
由此推断,线程资源的释放完全由系统决定,系统可能由于某种原因未及时释放资源,导致线程数一直增加。
代码里面只需要保证 线程函数 有return 就可以了
但是,这个问题更底层的原因就不清了,望知道的大神赐教,这种问题怎么规避?也有可能是我方向走错了,望大神指正。
- MFC 用afxbeginthread创建线程 线程函数直接 return 0 返回。任务管理器显示线程数与理论值不符
- mfc 创建线程函数AfxBeginThread,线程中访问mfc控件
- 用MFC库函数AfxBeginThread()来创建线程
- MFC创建线程01 AfxBeginThread
- MFC创建线程02 AfxBeginThread .
- mfc下AfxBeginThread创建线程
- 用哪个函数创建线程(AfxBeginThread)
- MFC用户线程AfxBeginThread()
- AfxBeginThread创建线程
- AfxBeginThread创建用户界面线程
- AfxBeginThread创建线程失败
- CreateThread()线程创建函数,AfxBeginThread等
- CreateThread()线程创建函数,AfxBeginThread等
- 用MFC库函数AfxBeginThread来操作线程
- 用MFC库函数AfxBeginThread来操作线程
- 用MFC库函数AfxBeginThread来操作线程
- 用MFC库函数AfxBeginThread来操作线程
- 用MFC库函数AfxBeginThread来操作线程
- PHP二叉树(三):红黑树
- favicon.ico and robots.txt
- H264解析开源库H264Bitstream
- leetcode---Fraction to Recurring Decimal
- 第九周--建立稀疏矩阵三元组表示算法库
- MFC 用afxbeginthread创建线程 线程函数直接 return 0 返回。任务管理器显示线程数与理论值不符
- nginx原理
- 栈01:实现栈的3中方式: 数组,链表和容器
- Java虚拟机基础
- 如何卸载 sdlx
- Spring之搭建环境
- java 之前的一些配置及简单运行
- 安全框架之shrio-简介
- 遗传算法入门简单实例