COM服务器挂起检测和解决方案

时间:2010-08-23 09:19:23

标签: c++ com hang

我有一个应用程序将请求发送到处理请求的proc COM服务器,并将它们发送回请求的应用程序。

客户端应用程序实际上控制了这个Out-of-Proc COM服务器的启动 - 停止,并确定它的生命周期。

由于此应用程序在任何给定时间都有数百个请求,因此它至少有4个相同的COM服务器来处理这些请求。

问题在于,有时这个COM服务器会挂起来处理请求,该请求会被请求应用程序捕获,该应用程序会终止proc COM服务器。然而,这并不总是发生。

有时会发生客户端应用程序请求COM服务器kill,这会导致客户端释放对COM服务器的所有引用,但COM服务器最终只使用25%的CPU并且永远不会死亡。它似乎只是挂起并不断使用CPU。

如果客户端无法死机,客户端有机会尝试强制终止COM服务器进程,但即使这样做似乎在COM服务器进入CPU使用情况并且只是挂起的情况下也不起作用。

有没有人经历过类似的事情,或者对如何解决这样的情况有一些建议?

1 个答案:

答案 0 :(得分:1)

您需要在COM服务器中设计所有调用,以便它们在相当短的时间内结束。一旦从客户端COM到达新呼叫,就会生成一个单独的线程并将调用分派给该线程。没有可靠的方法来中断呼叫 - 呼叫需要自行结束(只返回)。您可以通过适当地设计算法来实现这一目标。