博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TerminateThread函数学习
阅读量:6140 次
发布时间:2019-06-21

本文共 847 字,大约阅读时间需要 2 分钟。

终结一个线程。

 

BOOL WINAPI TerminateThread(  _Inout_  HANDLE hThread,  _In_     DWORD dwExitCode);

Parameters

hThread [in, out]

要终结线程的句柄。这个句柄必须有THREAD_TERMINATE权利。

dwExitCode [in]

线程的退出值。

返回值

 

如果函数成功,返回非0值。

如果失败,返回0.

注意

函数是用来推出线程。当函数调执行,目标线程没有机会执行任何用户级代码。与DLL关联的线程不被通知就终结了。系统是否线程的初始栈。

Windows Server 2003 and Windows XP:  目标线程的栈没被释放,会引起资源泄漏。

本函数是危险的,只能在极端情况下运用。如果你知道目标线程正在做什么,你可以调用TerminateThread;而且你可以控制目标线程在终结时运行的代码。比如,TerminateThread调用可能会引起下列问题:

  • 如果目标线程拥有关键段,那么关键段不会被释放。【这将引起资源泄漏和死锁】
  • 如果目标线程在堆上申请内存,不会被释放。【内存泄漏】
  • 如果目标线程执行某个kernel32调用,当天终结时,对于线程所在进程的kernel32状态会不连续。
  • 如果目标线程在操作一个共享DLL的全局状态,DLL的状态可能被破坏,从而影响DLL的其他使用者。

调用了TerminateThread,线程就不能自我保护,没有控制自己handle的权利了。通过返回的线程句柄用THREAD_TERMINATE的权利,因此任何调用者都能通过这些句柄来终结这个线程。

如果目标线程是进程的最后一个线程,线程的进程也会终结。

线程对象的状态会被激发,释放任何其他线程等待此线程终结的信号。【也就是WaitForSingleObject[threadID,]会变为激发态】

终止一个线程没有必要从系统移除线程对象。当最后一个线程句柄关闭时线程对象被删除。

转载地址:http://hcuya.baihongyu.com/

你可能感兴趣的文章
WPF 异步显示
查看>>
hihocoder 1465 循环串匹配问题(后缀自动机)
查看>>
使用XStream对Java对象进行序列化和反序列化
查看>>
注解(Annotation)自定义注解入门
查看>>
强制链接静态库所有符号(包括未被使用的)
查看>>
Asp.net获取系统信息
查看>>
【mysql】利用全文索引实现中文的快速查找
查看>>
Defining as a "long" or "int" type throws an error on startup
查看>>
在多台服务器上简单实现Redis的数据主从复制
查看>>
Html5 冒泡排序演示
查看>>
js 学习路线
查看>>
前端编辑工具有感
查看>>
CentOS6启动流程
查看>>
SpringBoot项目修改html后不即时编译
查看>>
mysql数据库的水平分表与垂直分表实例讲解
查看>>
OC 单例实现
查看>>
计算日期相隔天数/根据天数差计算结束日期
查看>>
iOS中RAC的使用
查看>>
MongonDB入门
查看>>
leetcode-506-Relative Ranks
查看>>