终结一个线程。

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的权利了。通过CreateThreadCreateProcess返回的线程句柄用THREAD_TERMINATE的权利,因此任何调用者都能通过这些句柄来终结这个线程。

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

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

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

TerminateThread函数学习的更多相关文章

  1. Python3中的字符串函数学习总结

    这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...

  2. Drools 函数学习

    Drools 函数学习 函数是定义在规则文件当中一代码块,作用是将在规则文件当中若干个规则都会用到的业务操作封装起来,实现业务代码的复用,减少规则编写的工作量.函数的编写位置可以是规则文件当中 pac ...

  3. C语言(函数)学习之strstr strcasestr

    C语言(函数)学习之[strstr]&[strcasestr]一.strstr函数使用[1]函数原型char*strstr(constchar*haystack,constchar*needl ...

  4. Java中的回调函数学习

    Java中的回调函数学习 博客分类: J2SE JavaJ#  一般来说分为以下几步: 声明回调函数的统一接口interface A,包含方法callback(); 在调用类caller内将该接口设置 ...

  5. Theano.tensor.round函数学习,同时解决输出Elemwise{xxx,no_inplace}.0的问题

    1. 出现Elemwise{xxx,no_inplace}.0   这是因为没有定义theano.function所致,参考下面错误示范: y = np.random.normal(size=(2,2 ...

  6. C++学习基础十六-- 函数学习笔记

    C++ Primer 第七章-函数学习笔记 一步一个脚印.循序渐进的学习. 一.参数传递 每次调用函数时,都会重新创建函数所有的形参,此时所传递的实参将会初始化对应的形参. 「如果形参是非引用类型,则 ...

  7. pythone函数基础(8)内置函数学习

    内置函数学习# sorted# map# filter# max# sum# round# chr# ord# dir# bool# eval# exec# zipimport mathres = m ...

  8. Javascript 随机数函数 学习之二:产生服从正态分布随机数

    一.为什么需要服从正态分布的随机函数 一般我们经常使用的随机数函数 Math.random() 产生的是服从均匀分布的随机数,能够模拟等概率出现的情况,例如 扔一个骰子,1到6点的概率应该相等,但现实 ...

  9. Javascript 随机数函数 学习之一:产生服从均匀分布随机数

    大家都知道Math.random是 javascript 中返回伪随机数的函数,但查看 MDN, The Math.random() function returns a floating-point ...

随机推荐

  1. CakePHP 2.x 升级3.0

    CakePHP 2.x => 3.x 升级手顺 一.Controller层 1.find('list') 原2.x中该方法通过指定option中的'fields'来实现key=>value ...

  2. 修改 tomcat 内存

    在Jetty 的VM参数中设置: -Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m 在tomcat运行环境中设置: window环境 ...

  3. 保存网页为图片——滚动截取IE(WebBrowse)

    对IE进行编程一直觉得是相当可怕的事情,里面的接口.函数.事件之多,解释之乱,需要了解的方方面面知识之博,让我仿佛看到了微软就是造物主,因为它已成功制造了这样的混沌,弄就了宇宙的初始状态…… 近来做个 ...

  4. spring mvc 建立下拉框并进行验证demo

    原文出处:http://howtodoinjava.com/spring/spring-mvc/spring-mvc-populate-and-validate-dropdown-example/ 该 ...

  5. c# 搭建服务端 常用的Helper(5)

    常用的Helper 1.byteHelper :对象与byte[]之间的转换 2.ConvertJson:操作json对象 3.EncodingHelper:对象编码 4.ModelConvertHe ...

  6. kafka学习(二)-zookeeper集群搭建

    zookeeper概念 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名 服务等.Zookeeper是h ...

  7. ubuntu 安装mysql, 以及全然又一次安装的方法

    sudo apt-get install mysql-server 装完后 是无法远程訪问的. 要先改动 sudo vim /etc/mysql/my.cnf 找到 bind-address = 12 ...

  8. hdu3280Equal Sum Partitions (区间DP)

    Problem Description An equal sum partition of a sequence of numbers is a grouping of the numbers (in ...

  9. ExecuteScalar

    ExecuteScalar运行查询,并返回查询所返回的结果集中第一行的第一列或空引用(假设结果集为空).忽略其它列或行. 使用 ExecuteScalar 方法从数据库中检索单个值. 由于不用创建行集 ...

  10. Struts2.x教程(一) Struts2介绍

    一.Struts2是什么 Struts2是在WebWork2基础发展而来的.和Struts1一样, Struts2也是基于MVC的web层框架. 那么既然有了Struts1,为何还要Struts2? ...