Win32多线程之 利用TerminateThread()放弃一个线程
来源:互联网 发布:电子cad设计软件 编辑:程序博客网 时间:2024/05/16 17:10
BOOL TerminateThread(
HANDLE hThread,
DWORD dwExitCode
);
参数
hThread 欲令其结束线程的handle,该线程就是我们的行动目标。
dwExitCode 该线程的结束代码。
返回值
如果函数成功,则传回TRUE。如果失败,则传回FALSE。GetLastError()可以获知更多细节。
TerminateThread()看起来不错,但其实它是一个危险的函数,应该在最不得已的情况下才使用“。
这是一个非常明白的警告。
TerminateThread()强迫其行动目标(一个线程)结束,手段极其残忍,甚至在不允许该线程有任何挣扎的机会,这带来的副作用就是:线程没有机会再结束前清理自己。对线程而言,这可能导致前功尽弃。这个函数不会在目标线程中丢出一个异常情况(exception),目标线程在核心层面就被根本抹杀了。目标线程没有机会捕捉到所谓的”结束请求“,并从而获得清理的机会。
还有一个令人不愉快的情况。目标线程的堆栈没有被释放掉。于是可能会引起一大块内存泄露(memory leak)。而且,任何一个与此县城有附着关系的DLL都没机会获得
”线程解除附着“的通知。
此函数唯一可以预期并依持的是,线程handle将变成激发状态(因为线程结束了),并且传回dwExitCode所指定的结束代码。
这个函数所带来的隐伏危机还包括:如果线程正进入一个critical section中,该critical section将因此永远处于锁定状态,因为critical section不像mutex那样的有所谓的”abandoned“状态,如果目标线程正在更新一份数据结构,这份数据结构也将永远处于不稳定状态。没有任何办法可以阻止这些问题的发生。
因此,最好别用TerminateThread()。
- Win32多线程之 利用TerminateThread()放弃一个线程
- Win32多线程之等待一个线程的结束(WaitForSingleObject)
- Win32多线程之线程等待
- Win32多线程之线程优先级
- 《Win32多线程程序设计》(10)---如何终止一个线程
- Win32多线程之线程对象与线程
- Win32多线程程序设计之线程通信 (一)
- Win32多线程程序设计之线程通信 (一)
- Win32多线程程序设计之线程通信 (二)
- Win32多线程程序设计之线程通信 (三)
- Win32多线程之线程上下文切换(Context Switching)
- 深入浅出Win32多线程程序设计之线程控制
- 深入浅出Win32多线程程序设计之线程通信
- 深入浅出Win32多线程程序设计之线程控制
- 深入浅出Win32多线程程序设计之线程通信
- 深入浅出Win32多线程程序设计之线程通信
- 深入浅出Win32多线程程序设计--之线程控制
- 深入浅出Win32多线程程序设计--之线程通信
- c++笔记
- 前K条最短路径算法
- 数组的排序
- rpc远程调用一些看法
- 第十四周上机实践项目——函数处理
- Win32多线程之 利用TerminateThread()放弃一个线程
- Web Services--gSOAP 2.7.6 第一章(1.4)
- LAMP日志-网卡配置
- 模态窗口和非模态窗口
- C++ 输入输出流之文件操作和文件流
- (回忆)初试java
- View的状态属性简介
- 程序语言简史(伪)
- 恋人过早同居的3个悲惨结局