有TerminalThread的替代方式吗?


一般在处理线程的时候最好不要使用TerminalThread函数,因为这样会造成堆栈被破坏。但是在有些情况下,要马上结束线程,就只有调用TerminalThread。请问,有能达到TerminalThread的效果而没有它的副作用的方式吗?

VC windows

yidanpu 12 years, 4 months ago

TerminalThread 会带来以下问题:

  1. 未释放互斥区,造成死锁(整个进程在分配和回收内存时,都要用同一把锁。如果一个线程在占用该锁时被杀死(即临死前该线程在new或delete操作中),其他线程就无法再使用new或delete了,表现为hang住)
  2. 未释放堆分配锁,造成死锁(同上)
  3. 在执行内核函数时退出,造成该线程所在进程状态不确定,程序可能崩溃
  4. 在使用DLL时退出,造成DLL被销毁,其他使用该DLL得程序可能出现问题!

怎么解决呢:

两种解法:

  1. 用同步机制来控制线程退出,如果同步机制被唤醒,由线程自己来执行资源释放和退出纯种的功能。
  2. 定时检查,每隔一段时间去检查一个标志,当标志被改时,自动退出
kudeng answered 12 years, 4 months ago

Your Answer