Windows API安全终止线程

kzipqqlq  于 2022-09-21  发布在  Windows
关注(0)|答案(2)|浏览(233)

我在Windows XP上有Delphi应用程序。这个应用程序使用100个线程。在某些情况下,我必须使用线程堆栈的完全删除来终止线程。

我在寻找WinAPI中的函数,如Terminatthread,但它不安全:Windows Server 2003 and Windows XP/2000: The target thread's initial stack is not freed, causing a resource leak.

kiayqfof

kiayqfof1#

没有这样的功能。这样的功能不可能存在。Windows不可能知道该线程将清理哪些资源,也不知道如何进行清理。这就是你的应用程序的责任。

在我看来,你做这件事的方式不对。你应该在不使用武力的情况下,以合作的方式终止线程。其他任何事情都必然会导致泄漏,最有可能的是其他更严重的问题。

n1bvdmb6

n1bvdmb62#

如果您的应用程序线程都是用Delphi代码编写的,那么可以考虑使用OmniThreadLibrary,并使用它提供的服务,而不是原始的Win32API或TThread的内置功能,这在Delphi的最新版本中相当不错。

然而,对于发信号通知线程并关闭它们,特别是在并非所有线程都是由Delphi线程对象创建和管理的情况下,您必须完成大量设计工作,并且您可能必须将几个Win32原语组合在一起才能构建一个像样的解决方案。例如,我将使用Win32事件和使用Win32事件句柄的C/C++编写的线程信号。

对于纯100%的Delphi代码库,我会简单地使用任何经过良好测试的代码,并使用TThreadAPI或OmniThreadLibrary,而不是使用原始的Win32API。

相关问题