如何正确的创建线程,终了线程(2)

上一讲我们说了Win32下如何创建线程,这一讲我们来说线程是如何终止的。
2>线程是如何终止的呢
 线程函数返回
 线程通过调用ExitThread函数“杀死”自己
 同一进程或另一进程中调用TerminateThread函数
 包含线程的进程终止

线程函数返回
设计线程函数时,应该确保线程结束时,线程函数就返回。这是确保线程函数所有资源释放的唯一途径。那么函数返回可以确保哪些资源被正确释放呢?
 线程中所创建的所有C++对象都通过其析构函数被正确释放。
 操作系统正确释放线程栈。
 操作系统把线程退出码设为线程返回值。(内核对象维护)
 操作系统减少线程内核对象的引用计数。

线程通过调用ExitThread函数“杀死”自己
函数终止线程运行,并使操作系统清理该线程中使用的操作系统资源,而C++资源(C++对象)不会被释放。
函数原型:
VOID ExitThread(
DWORD dwExitCode // exit code for this thread
);
但是可以通过设置参数dwExitCode 告诉操作系统线程的退出码设为什么。
我们可以通过GetExitCodeThread函数获取线程退出码,来明白线程退出时的状况。
※如何C/C++代码不要调用ExitThread(Windows函数),应该使用C++运行时库函数__endthreadex

同一进程或另一进程中调用TerminateThread函数

函数能“杀死”任何线程,调用TerminateThread杀死线程时,参数dwExitCode 变成线程退出码。线程内核对象的引用计数减少。线程拥有的堆栈直到拥有该线程的进程终止才释放。
函数原型:
BOOL TerminateThread(
HANDLE hThread, // handle to thread
DWORD dwExitCode // exit code
);

包含线程的进程终止
ExitProcess和TerminateProcess也可以终止线程的运行,这些函数会终止该进程中所有的运行的线程。所使用的资源会被清理。

※线程状态的侦测:
BOOL GetExitCodeThread(
HANDLE hThread, // handle to the thread
LPDWORD lpExitCode // termination status
);
lpExitCode 指向线程函数的退出码,线程未退出时,指向STILL_ACTIVE(0x103)值。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值