当使用返回或调用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 + +对象撤消函数没有被调用,数据没有转至磁盘等等。
使用返回或调用E x i t T h r e a d的方法撤消线程时,该线程的内存堆栈也被撤消
转载上一篇:借助栈实现二叉树中序遍历
下一篇:求二叉树深度的算法
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
_ 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 多线程 编译器 编程 数据结构 -
撤消操作
任何时候,你都有可能需要撤消刚才所做的某些操作。接下来,我们会介绍
Git git 暂存区 文件复制