使用返回或调用E x i t T h r e a d的方法撤消线程时,该线程的内存堆栈也被撤消
来源:互联网 发布:mac视频剪辑工具 编辑:程序博客网 时间:2024/06/02 16:24
注意当使用返回或调用E x i t T h r e a d的方法撤消线程时,该线程的内存堆栈也被撤消。
但是,如果使用Te r m i n a t e T h r e a d,那么在拥有线程的进程终止运行之前,系统不撤消该
线程的堆栈。M i c r o s o f t故意用这种方法来实现Te r m i n a t e T h r e a d。如果其他仍然正在执行
的线程要引用强制撤消的线程堆栈上的值,那么其他的线程就会出现访问违规的问题。
如果将已经撤消的线程的堆栈留在内存中,那么其他线程就可以继续很好地运行。
此外,当线程终止运行时, D L L通常接收通知。如果使用Terminate Thread 强迫
线程终止,D L L就不接收通知,这能阻止适当的清除(详细信息参见第2 0章)。
6.5.4 在进程终止运行时撤消线程
第4章介绍的E x i t P r o c e s s和Te r m i n a t e P r o c e s s函数也可以用来终止线程的运行。差别在于这
些线程将会使终止运行的进程中的所有线程全部终止运行。另外,由于整个进程已经被关闭,
进程使用的所有资源肯定已被清除。这当然包括所有线程的堆栈。这两个函数会导致进程中的
剩余线程被强制撤消,就像从每个剩余的线程调用Te r m i n a t e T h r e a d一样。显然,这意味着正确
的应用程序清除没有发生,即C + +对象撤消函数没有被调用,数据没有转至磁盘等等。
但是,如果使用Te r m i n a t e T h r e a d,那么在拥有线程的进程终止运行之前,系统不撤消该
线程的堆栈。M i c r o s o f t故意用这种方法来实现Te r m i n a t e T h r e a d。如果其他仍然正在执行
的线程要引用强制撤消的线程堆栈上的值,那么其他的线程就会出现访问违规的问题。
如果将已经撤消的线程的堆栈留在内存中,那么其他线程就可以继续很好地运行。
此外,当线程终止运行时, D L L通常接收通知。如果使用Terminate Thread 强迫
线程终止,D L L就不接收通知,这能阻止适当的清除(详细信息参见第2 0章)。
6.5.4 在进程终止运行时撤消线程
第4章介绍的E x i t P r o c e s s和Te r m i n a t e P r o c e s s函数也可以用来终止线程的运行。差别在于这
些线程将会使终止运行的进程中的所有线程全部终止运行。另外,由于整个进程已经被关闭,
进程使用的所有资源肯定已被清除。这当然包括所有线程的堆栈。这两个函数会导致进程中的
剩余线程被强制撤消,就像从每个剩余的线程调用Te r m i n a t e T h r e a d一样。显然,这意味着正确
的应用程序清除没有发生,即C + +对象撤消函数没有被调用,数据没有转至磁盘等等。
- 使用返回或调用E x i t T h r e a d的方法撤消线程时,该线程的内存堆栈也被撤消
- VC-终止线程,ExitThread函数,Te r m i n a t e T h r e a d函数,撤消线程,详解
- VC-终止线程,ExitThread函数,Te r m i n a t e T h r e a d函数,撤消线程,详解
- C r e a t e T h r e a d的最后一个参数是p d w T h r e a d I D,可以(并且通常是这样做的)为该参 数传递N U L L。它告诉函数,你对线程的I D不感兴趣
- 决不应该调用E x i t T h r e a d。应该使用Visual C++运行期库函数_ e n d t h r e a d e x
- Te r m i n a t e T h r e a d函数是异步运行的函数,必须调用Wa i t F o r S i n g l e O b j e c t
- F i r s t T h r e a d可以在S e c o n d T h r e a d将5分配给F i r s t T h r e a d的x之前结束它的 操作
- _ b e g i n t h r e a d e x函数与C r e a t e T h r e a d函数
- C r e a t e P r o c e s s的b I n h e r i t H a n d l e s参数
- 6.7.1 Oops—错误地调用了C r e a t e T h r e a d
- I N T E R V I E W S W I T H T H E V A M P I R E S 1
- I N T E R V I E W S W I T H T H E V A M P I R E S 2
- N o v e m b e r 2 t h F r i d a y
- N o v e m b e r 9 t h F r i d a y
- N o v e m b e r 1 6 t h F r i d a y
- N o v e m b e r 2 3 t h F r i d a y
- N o v e m b e r 3 0 t h F r i d a y
- gethibernatetemplate的find方法大全
- C r e a t e T h r e a d的最后一个参数是p d w T h r e a d I D,可以(并且通常是这样做的)为该参 数传递N U L L。它告诉函数,你对线程的I D不感兴趣
- Ubuntu 12.04 LTS 下 OpenGL环境的搭建
- 使用Pix For Windows调试Shader傻瓜教程
- 决不应该调用E x i t T h r e a d。应该使用Visual C++运行期库函数_ e n d t h r e a d e x
- Te r m i n a t e T h r e a d函数是异步运行的函数,必须调用Wa i t F o r S i n g l e O b j e c t
- 使用返回或调用E x i t T h r e a d的方法撤消线程时,该线程的内存堆栈也被撤消
- PIX for Windows使用
- 没有eclipse|myeclipse配置文件的情况下导入java web工程文件
- 黑马程序员--ADO.NET小结(上)
- Android OpenGL ES 开发教程(26):设置光照效果Set Lighting
- java学习记录
- Android获取图片资源的4种方式
- 基于域名的虚拟主机的原理
- 四种多服务器共享session的方法