Windows API安全终止线程

The*_*rse 2 delphi winapi multithreading thread-safety

我在Windows XP上有Delphi应用程序.此应用程序使用100个线程.在某些情况下,我必须通过完全丢弃线程的堆栈来终止线程.

我在WinAPI中寻找函数,比如terminatethread,但它并不安全: Windows Server 2003和Windows XP/2000:目标线程的初始堆栈未被释放,导致资源泄漏.

Dav*_*nan 12

没有这样的功能.没有这样的功能可能存在.Windows无法知道该线程要整理哪些资源,并且无法知道如何执行此操作.这是您的应用程序的责任.

对我来说听起来像是你走错了路.你应该在不使用武力的情况下以合作的方式终止线程.任何其他事物都必然导致泄漏,并且很可能是其他更严重的问题.

  • 安全终止线程的唯一方法是在它准备就绪时请它自行终止. (4认同)
  • @Marjan,据我所知,`ExitProcess`和`TerminateProcess`之间的唯一区别是DLL从前者接收DLL_PROCESS_DETACH通知.我几乎不认为那更安全.事实上,MSDN描述了一种情况,即前者不会导致死锁.文档说明了为什么从注入的线程调用`ExitProcess`不是一个好主意. (2认同)