Windows线程同步-如何终止一个线程

本文探讨了Windows线程同步中如何安全地终止一个线程,强调了避免使用TerminateThread()的原因,因为它可能导致内存泄漏和数据结构不稳定。推荐使用ExitThread()来结束线程,但需要注意C++资源不会被撤销。线程函数返回是终止线程的首选方式,而在特定情况下,可以使用_endthreadex或相应编译器提供的函数。
摘要由CSDN通过智能技术生成

如何终止一个正在运行的线程:
强制终止线程就一个原则,最好让线程自己结束,即线程return;
1.用TerminateThread()

BOOL TerminateThread(
HANDLE hThread,
DWORD dwExitCode
);
书中解释:TerminateThread() 看 起 来 不 错 , 直 到 我 读 了 一 份 文 件 , 上 面 说 :
“ TerminateThread() 是一个危险的函数, 应该在最不得已的情况下才使用”。
这是一个非常明白的警告。
TerminateThread() 强迫其行动目标(一个线程)结束,手段激烈而有力,
甚至不允许该线程有任何“挣扎”的机会。这带来的副作用便是,线程没有机
会在结束前清理自己。对线程而言,这可能导致前功尽弃。这个函数不会在目
标线程中丢出一个异常情况( exception),目标线程在核心层面就被根本抹杀
了。目标线程没有机会捕捉所谓的“结束请求”,并从而获得清理自己的机会。
还有另一个令人不愉快的情况。目标线程的堆栈没有被释放掉,于是可能
会引起一大块内存泄漏( memory leak)。而且,任何一个与此线程有附着关系
的 DLLs 也都没有机会获得“线程解除附着”的通知。
此函数唯一可以预期并依恃的是,线程 handle 将变成激发状态(译注:
因为线程结束了),并且传回 dw ExitCode 所指定的结束代码。
这个函数所带来的隐伏危机还包括: 如果线程正进入一个 critical section
之中,该 c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值