在C++中,MFC:檢查存在的COM指針
我有一個CComPointer:
CComPointer<IMyTask> m_pTask;
有很多的在我的代碼的地方,我把這個ComPointer運行任務的方法。例如:
void method1()
{
if (FAILED(hRet = m_pTask->MyFunc1()))
.....
}
void method2()
{
if (FAILED(hRet = m_pTask->MyFunc2()))
.....
}
我嘗試解決MyTask關閉時要恢復的問題。 我寫了一個方法recover(),它將CoCreate重新運行到MyTask,它實際上解決了這個問題。
我可以看到,如果MyTask死了,我得到一個人力資源失敗代碼-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,如果不是,它將運行恢復。
我該怎麼辦?
這不是MFC它是ATL。 –
壞主意,恕我直言。網絡往返不便宜;你的數量實際上翻了一番。無論如何,DCOM運行時檢查死了的服務器 - 有一個週期性的ping。 –
@Seva Alekseyev:沒有,他沒有增加他們的金額,如果服務器沒問題,他不需要恢復,這通常是這種情況。如果服務器不好,然後重新啓動它需要很多時間。 – sharptooth