如何正确的创建线程,终了线程(1)
2013-09-30 22:49
211 查看
最近公司很老的一个制品出现了memoryleak,现在搞的人头很大
,查的过程中积累点东西和大家分享一下~
1>如何正确的创建线程?
Win32中创建线程函数对比。
※1)对于C/C++程序调用CreateThread()会有内存泄露,推荐使用__beginthreadex。
2)线程创建失败时,__beginthread()和__beginthreadex()的返回值不同。__beginthread()是-1,__beginthreadex()是0。
3)线程退出时,__beginthread()会调用__endthread(),此函数会释放线程的_tidata块,然后调用ExitThread()后,最后CloseHandle()。而__begintheadex()会调用__endtheadex().此函数同__endthread不同之处,只是不会关闭线程句柄。
4)如果调用__beginthread()来创建线程,后面代码是不能涉及关于此线程句柄的处理。
比如:用WaitForSingleObject函数来判断__beginthread()创建的线程终了,是不可取的。
详细请参考《Windows核心编程》
,查的过程中积累点东西和大家分享一下~
1>如何正确的创建线程?
Win32中创建线程函数对比。
函数 | 提供者 | 适用范围 |
__beginthread() | C/C++提供 | C/C++程序 |
__beginthreadex() | C/C++提供 | C/C++程序 |
CreateThread() | Windows提供 | Windows程序 |
2)线程创建失败时,__beginthread()和__beginthreadex()的返回值不同。__beginthread()是-1,__beginthreadex()是0。
3)线程退出时,__beginthread()会调用__endthread(),此函数会释放线程的_tidata块,然后调用ExitThread()后,最后CloseHandle()。而__begintheadex()会调用__endtheadex().此函数同__endthread不同之处,只是不会关闭线程句柄。
4)如果调用__beginthread()来创建线程,后面代码是不能涉及关于此线程句柄的处理。
比如:用WaitForSingleObject函数来判断__beginthread()创建的线程终了,是不可取的。
详细请参考《Windows核心编程》
相关文章推荐
- 在 Windows 7 下如何使用 native c++ 正确创建线程
- 如何正确的创建线程,终了线程(2)
- Unity3D之如何创建正确的像素比在屏幕上
- android 快速创建一个新的线程 & android线程的正确使用
- 如何正确退出线程
- 如何创建并运行java线程
- 如何正确的关闭 MFC 线程
- 如何通过Eclipse创建Web工程、正确配置Tomcat及Shiro安全框架入门
- VC如何对新创建的一个线程暂停或重启
- VC++ 如何创建一个线程并传递参数
- Unity3D之如何创建正确的像素比在屏幕上
- Java并发编程:如何创建线程?
- Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统
- 如何:创建和终止线程
- 如何在线程中创建可以响应事件的窗体
- VC++ 创建线程的三种方式以及如何进行选择
- 略谈如何创建一个监控线程
- 如果创建工程的时候没有勾选Unit Test选项,如何创建单元测试 正确删除test target
- 如何把SketchUP里创建的模型正确的导入到CityEngine中?
- 如何创建线程的实例