使用返回或调用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 + +对象撤消函数没有被调用,数据没有转至磁盘等等。