TerminateThread的疑问,请高手解释一下,谢谢!(50分)

  • 主题发起人 主题发起人 hotreg
  • 开始时间 开始时间
其实只要掌握了这个函数会做哪些事情,合理的控制住就可以了,没有必要那么极端的
 
有的时候极端一点好,INTEL的头头不是说这个世界只有偏执狂才能生存吗?
 
天哪,这并不是一回事
 
当然我在WaitFor()之前是做了一些事情,使线程能够安全的推出
 
所谓的不安全,其实只是说在使用TerminateThread后有内存没有办法被释放,只要我们有办法把那些内存释放掉我想就应该没有什么问题的
 
那你怎么知道那些内存没有释放了?这样的话你要设置很多标志,那么编程就太麻烦了
而且很多意外情况不好处理,比如一些操作系统给一些API分配的内存。。。
 
API的的确是有一些麻烦,但是如果是自己申请的内存是可以保证能够被释放掉的
 
昨天我回去翻了一下WINDOWS编程的书,
上面有一句话说的很清楚TerminateThread是不良程序设计的
结果。。。
一般来说使用该函数说明写程序的人设计有问题,没有设计好
线程的逻辑才会使用该函数...
 
同意:总之用了TerminateThread函数后,程序一般来说已经失去了控制。
以后会发生什么错误就难以预料了.
 
哪一本书写的?那么,如果是这样的话,TerminateThread函数就没有存在的必要了?
 
《WINDOWS核心编程》
至于TerminateThread是在万不得以的情况下可以使用。。。
我在WaitFor超过一定时间以后也用了这个函数,呵呵,不过
我还没碰到WaitFor超时的...
 
谢谢了,张无忌,让我加深了了解
 
终止线程,要在线程的Execute()中经常地检查Terminated属性的值,来确定是否要提前退出,这样你就可以在线程退出前能够完成必要的清除。
在某些紧急的情况下还可以使用Win32 API函数TerminateThread()来终止一个线程,但是,只有在没有别的办法了才可以用,否则请不要使用它,例如:当线程陷入一个死循环时。
使用该函数,要考虑它所带来的负面影响。在Win95/98下,该函数能自动清除线程所占用的栈,在win200/Nt下,所用该函数都会令线程立即停止执行,这就意味着你在线程中所有打开的文件没有被关闭,由线程申请的内存没有被释放等。
 
偏要、一定要用TerminateThread()也不是没有办法的
把所有线程封装在一个进程里,由你的程序生成子进程。
Terminate后把那个进程也关掉,让Windows负责释放分配的资源,文件,内存等。
(当然不包括某些内核对象)
父进程和子进程通过消息传递
 
理论上是这样
我也没有试过 ^_^
 
to 张无忌:
把你改过的THREAD的WAITFOR贴出来给大家看看吧,我以前也随便改了下,不过改的不好,想参考下你的
 
后退
顶部