如何隔离第三方组件的崩溃

2019-09-10 16:43:36 浏览数 (2)

在引入第三方组件的时候,如果其稳定性不够偶尔会崩溃,如何将它进行隔离使得其崩溃不会影响主程序崩溃呢?

主要有两个方法:

第一, 调用第三方组件的每个接口进行异常捕获。

第二, 独立进程加载调用第三方组件。

调用第三方组件的每个接口进行异常捕获时,将调用代码放在__try代码块内,filter-expression指定EXCEPTION_EXECUTE_HANDLER,如果第三方组件崩溃被捕获就认为调用失败,功能无法正常使用,但是主程序不会崩溃。

代码语言:javascript复制
__try
{
    // guarded body of code  
}
__except(filter-expression)
{
    // exception-handler block  
}

第三方组件有可能在DLL加载过程中崩溃,需要使用LoadLibrary()动态加载DLL,将LoadLibrary()代码放在__try代码块内。如果DLL使用静态链接时操作系统负责加载DLL,那是无法捕获到异常。

如果第三方组件内部崩溃不是由于主程序调用接口的过程中产生的,而是内部产生(比如内部线程代码触发)就得使用第二种方法。

独立进程加载调用第三方组件,由于第三方组件运行在独立进程,独立进程崩溃不会影响主程序的进程崩溃。独立进程实现比较复杂,包括进程启动结束、进程间通信,通信协议定义。

Windows进程间通信的主要方式包括:

第一, 使用WM_COPYDATA消息

第二, 使用管道

第三, 使用本地socket

如果懂得COM组件开发,将第三方组件封装成COM组件给主程序调用是很好的解决方案,COM组件无需考虑进程启动结束、进程间通信,通信协议定义等细节。

0 人点赞