C ++では、MFC:
私はCComPointerを持っています:
CComPointer<IMyTask> m_pTask;
私のコードにはたくさんの場所があります。このComPointerを呼び出して、タスクのメソッドを実行します。例えば:
void method1()
{
if (FAILED(hRet = m_pTask->MyFunc1()))
.....
}
void method2()
{
if (FAILED(hRet = m_pTask->MyFunc2()))
.....
}
MyTaskがダウンしたときに回復する問題を解決しようとしています。CoCreateをMyTaskに再実行するメソッドrecover()を作成しましたが、実際に問題を解決します。
MyTaskが停止している場合、HR失敗コード-2147023174が発生し、RPCサーバーが利用できないことがわかりました。ただし、comポインタm_pTaskには完全なデータがあります(タスクが停止していることはわかりません)。
私はこのようなことをすることができます:
void method1()
{
if (FAILED(hRet = m_pTask->MyFunc1()))
if (hRet == -2147023174)
recover();
.....
}
void method2()
{
if (FAILED(hRet = m_pTask->MyFunc2()))
if (hRet == -2147023174)
recover();
.....
}
しかし、compointerを介してメソッドを呼び出すことがたくさんあるので、もっと一般的なものを作りたいと思います。ComPointerを介してメソッドを実行しようとするたびに、メソッドを実行する前に、タスクがすでに存在することを確認し、存在しない場合は、recoverメソッドを実行する必要があります。タスクが停止している場合でも、ComPointerにはCoCreate時のすべてのデータが残っているため、どうすればよいかわかりません。
どうすればいいですか?
システムでエラーが発生したためにタスクが停止しました。今のところ、私のソリューションでは、タスクを回復するためだけに、タスクの失敗の理由を見つける必要はありません。ComPointerのラッパーのような一般的な解決策を探していますが、ラッパークラスがMyTaskがまだ存在するかどうかだけをチェックし、存在する場合はComPointerを返し、存在しない場合はrecoverを実行するようにします。 。
どうすればいいですか?