Delphi 如果终止挂起的线程是一个好主意,那么如何安全地执行它?
我的Delphi程序严重依赖Outlook自动化。由于外接程序编写错误和Outlook代码编写错误,2007-SP2之前的Outlook版本往往会卡在内存中 如果Outlook被卡住,请调用CreateOleObject('Outlook.Application')或GetActiveObject。。。在任务管理器中关闭Outlook.exe之前,不会返回并保持应用程序挂起 我已经想到了一个解决办法,但我不确定这是否是一个好的做法 我会在一个单独的线程中使用CreateOleObject启动Outlook,在主线程中等待10秒,如果Outlook挂起(CreateOleObject不返回),请用户从我的程序中终止Outlook.exe进程 但是由于我不想强制用户终止Outlook.exe进程,作为替代方案,我还需要一种方法来终止程序中的新线程,该线程现在一直挂起Delphi 如果终止挂起的线程是一个好主意,那么如何安全地执行它?,delphi,multithreading,outlook,automation,Delphi,Multithreading,Outlook,Automation,我的Delphi程序严重依赖Outlook自动化。由于外接程序编写错误和Outlook代码编写错误,2007-SP2之前的Outlook版本往往会卡在内存中 如果Outlook被卡住,请调用CreateOleObject('Outlook.Application')或GetActiveObject。。。在任务管理器中关闭Outlook.exe之前,不会返回并保持应用程序挂起 我已经想到了一个解决办法,但我不确定这是否是一个好的做法 我会在一个单独的线程中使用CreateOleObject启动Ou
如果挂起是一致的,并且总是发生或不发生,您可以在应用程序中调用CreateOleObject并退出,然后从自己的应用程序中再次调用它。如果不一致,则辅助应用程序可以是一个更完整的包装器,所有的交互都将通过它。此外,您可以使用线程上下文的eip寄存器 您可以在以下网址找到样品:
“写得不好”会被一些人视为煽动性的,或者被我们这些曾经处理过这些问题的人视为多余的。我和你一样痛苦,兄弟……谢谢你,我没有想到单独的申请,但这完全解决了我的问题。我正在使用ShellExecuteEx启动另一个应用程序(只调用一次CreateOleObject),如果生成的应用程序没有返回,我将根据用户请求终止outlook或应用程序。