delphi – 如果终止挂线是一个好主意,我该如何安全地执行?

前端之家收集整理的这篇文章主要介绍了delphi – 如果终止挂线是一个好主意,我该如何安全地执行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的Delphi程序在很大程度上依赖于Outlook自动化. 2007-SP2之前的Outlook版本由于写入错误插件和写入不正确的Outlook代码而往往被卡在内存中.

如果Outlook被卡住,调用CreateOleObject(‘Outlook.Application’)或GetActiveObject …不返回,并保持我的应用程序挂起,直到Outlook.exe在任务管理器中关闭.

我想到了一个解决方案,但我不知道这是否是好的做法.

我将在单独的线程中使用CreateOleObject启动Outlook,在主线程中等待10秒,如果Outlook挂起(CreateOleObject不返回),则提供用户从我的程序中删除Outlook.exe进程.

但是,由于我不想强制用户杀死Outlook.exe进程,作为替代方案,我还需要一种方法来杀死我的程序中的新线程,该线程现在将保持挂起.

这是好的做法吗?
>如何在Delphi中终止挂线,而不会泄漏内存?

解决方法

Windows具有 TerminateThread功能,但是从这些注释可以看出,使用它通常不是一个好主意.更安全的方法是让一个辅助应用程序与Outlook进行交互,然后你可以杀死它,而不影响你自己的应用程序的稳定性. TerminateProcess将工作,但如果您想要更系统地使用该系统,Dobbs博士有一个 article可能采用ExitProcess更安全的方法.

如果挂起是一致的,并且始终发生或不发生,您可以在应用程序中调用CreateOleObject并退出,然后再次从您自己的调用.如果不一致,则辅助应用程序可能是更完整的包装器,并且所有的交互都将通过它.

猜你在找的Delphi相关文章