线程组成
- 线程内核对象:操作系统用他来管理线程,存放线程统计信息
- 线程栈:用于维护线程执行时所需的所有函数参数和变量
线程退出方式
- 线程退出最好的方式是通过线程函数返回
- 线程通过ExitThread终止运行时,C/C++资源不会被销毁
- 线程被TerminateThread杀死(此过程会以异步的方式进行),除非线程所属进程退出否则被杀死的线程的堆栈不会被释放。经测试,被杀死的线程的C++资源也不会被自动销毁(现象同被杀死的线程自己调用ExitThread一样)
- 线程所属进程以ExitProcess或TerminateProcess方式被杀死,线程的清理工作也不能正常进行
#include <windows.h>
#include <cstdio>
#include <cassert>
class CTest
{
public:
CTest() { printf("Create\n"); }
~CTest() { printf("Destroy\n"); }
};
DWORD WINAPI ThdFun(PVOID pValue)
{
CTest Test;
ExitThread(0);
return 0;
}
int main()
{
auto hThread = CreateThread(nullptr, 0, ThdFun, nullptr, 0, nullptr);
assert(hThread);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
system("pause");
return 0;
}
/*
运行结果:输出"Create"而不会输出"Destroy"
备注:就算主进程退出也不会输出"Destroy"
*/
_beginthreadex
网友评论