当进程终止时,操作系统将回收所有分配的内存并关闭所有打开的句柄。您无需担心在关闭应用程序的特殊事件中泄漏的 MEMORY*)。操作系统也会关闭所有打开的句柄**),至少理论上是这样。考虑到所有这些,在终止其他共享资源之前,您可以安全地从表单析构函数中简单地终止线程(使用TerminateThread(MyThread.Handle) )。问自己这些问题:
- 线程在做什么?随时终止它是否安全?示例:如果线程正在对磁盘进行任何写入,那么直接杀死它是不安全的,因为您可能会在磁盘上以不一致的状态保存文件。
- 您是否正在使用 Windows 不会自动释放的任何资源?在这里想不出一个很好的例子......
如果您对两者都安全,则可以使用 TerminateThread 而不是等待线程自然终止。一种更安全的方法可能是一种组合方法,也许你应该给线程一个自然终止的机会,如果它没有在 5 秒内终止,则强制终止它。
*)我说的是内存,你只能证明进程终止时的泄漏,比如你杀死的线程没有给它们正确关闭的机会,或者你没有释放的全局单例类。所有其他下落不明的内存都需要追踪和修复,因为这是一个错误。
**) 不幸的是,Windows 操作系统并非没有错误。示例:在 Windows 平台上使用串行设备的任何人都知道将串行设备置于“锁定”状态是多么容易,需要重新启动才能使其再次工作。从技术上讲,这也是一个句柄,最终处理锁定它的应用程序应该解锁它。