我在Windows XP上有Delphi应用程序。此应用程序使用100个线程。在某些情况下,我必须通过完全丢弃线程的堆栈来终止线程。
我在WinAPI中寻找函数,例如 terminatethread ,但它不是safelly,并且: Windows Server 2003 and Windows XP/2000: The target thread's initial stack is not freed, causing a resource leak.
答案 0 :(得分:12)
没有这样的功能。不可能存在这样的功能。 Windows无法知道该线程要整理哪些资源,并且无法知道如何执行此操作。这是您的应用程序的责任。
听起来我觉得这样做的方式不对。你应该在不使用武力的情况下以合作的方式终止线程。任何其他事情都必然导致泄密,并且很可能是其他更严重的问题。
答案 1 :(得分:1)
如果您的应用程序线程都是用Delphi代码编写的,那么考虑使用OmniThreadLibrary,并使用其提供的服务,而不是原始的Win32 API,或者TThread的内置功能,这在最近的Delphi版本中相当不错。
但是,对于信令线程并将其关闭,特别是在没有所有线程由Delphi THread对象创建和管理的情况下,您必须完成大量设计,并且您可能需要将几个Win32原语一起构建了一个体面的解决方案。例如,我将使用Win32事件和使用Win32事件句柄以C / C ++编写的信号线程。
对于纯粹的100%delphi代码库,我只需使用经过良好测试的任何内容,并使用TThread API或OmniThreadLibrary,而不是使用原始的Win32 API。