《Windows核心编程系列》 -- 线程基础
作者:网络转载 发布时间:[ 2012/12/4 10:31:42 ] 推荐标签:
四、终止运行线程
线程可以通过以下4种方法来终止运行:
线程函数返回(这是强烈推荐的);
线程通过ExitThread 函数“杀死”自己(应避免);
同一个进程或另一个进程中的线程调用TerminateThread 函数(应避免);
包含线程的进程终止运行(应避免);
五、线程函数返回
设计线程函数时,应该确保在我们希望线程终止运行时,让它们返回。这是保证线程的所有资源被正确清理的方式。让线程函数返回,可以确保一下正确地应用程序权利工作都得以执行:
线程函数中创建的所有C++对象都通过其析构函数被正确销毁;
操作系统正确释放线程栈使用的内存;
操作系统把线程的退出代码(在线程的内核对象中维护)设为线程函数的返回值;
系统减少线程的内核对象的使用计数;
六、ExitThread函数
VOID ExitThread(DWORD dwExitCode);
该函数将终止线程的执行,并导致操作系统清理该线程使用的所有系统资源。但是你的C/C++资源(如C++类对象)不会被销毁。所以更好的做法是直接从线程函数返回,不要自己调用 ExitThread 。
ExitThread 是Windows用于“杀死”线程的函数,如果要写C/C++代码,不要调用 ExitThread 。相反,应该使用C++运行库函数_endthreadex 。 如果使用的不是Microsoft的C++编译器,那么编译器供应商应该提供它们自己的 ExitThread 替代函数。 不管这个替代函数是什么,都必须使用它。
七、TerminateThread函数
BOOL TerminateThread(
HANDLE hThread,
DWORD dwExitCode);
TerminateThread 是异步函数 ,ExitThread 函数来终止线程,线程的堆栈会被销毁,而 TerminateThread ,除非拥有此线程的进程终止运行,否则系统不会销毁这个线程的堆栈。
八、线程终止运行时
一个线程终止时,系统会一次执行以下操作:
线程拥有的所有用户对象句柄会被释放;
线程的退出代码从STILE_ACTIVE变为传给ExitThread或TerminateThread函数的代码;
线程内核对象的状态变为已触发状态;
如果线程是进程中的后一个活动线程,系统认为进程也终止了;
线程内核对象的使用计数递减1;
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11