加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:29:24 所属栏目:大数据 来源:网络整理
导读:我的Delphi程序在很大程度上依赖于Outlook自动化. 2007-SP2之前的Outlook版本由于写入错误的插件和写入不正确的Outlook代码而往往被卡在内存中. 如果Outlook被卡住,调用CreateOleObject(‘Outlook.Application’)或GetActiveObject …不返回,并保持我的应用
我的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并退出,然后再次从您自己的调用.如果不一致,则辅助应用程序可能是更完整的包装器,并且所有的交互都将通过它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读