2009-10-01 116 views
0

稱爲XPCOM功能我想創建XPCOM組件線程... 以下是一個Firefox崩潰時,從線程

nsresult rv = NS_OK; 
    nsCOMPtr<Callback> obj = do_CreateInstance("@jscallback.p2psearch.com/f2f;1", &rv); 
    NS_ENSURE_SUCCESS(rv, rv); 
    char* str="Hello from C++"; 
    obj->Status(str); 
    _beginthread((void(*)(void*))&(P2P::test), 0,obj); 

    return NS_OK;//obj->Status(str); 

代碼,這裏是一個線程函數

當我打電話調用線程它的工作原理,但只要我喜歡寫東西obj->Status(temp);上的Firefox崩潰函數調用此函數之前

class P2P{ 
    static char RecvBuf[1024]; 
public: 
    static void test(Callback* obj){ 
    // char* temp="Hellllllooo"; 
    // obj->Status(temp); 
    return; 
} 

}; 

回答

1

當你的代碼,開始牛逼他的線程超出範圍,nsCOMPtr將釋放該對象,並將其計數歸零。此時,該對象將被刪除。在超出範圍之前,您需要調用NS_ADDREF(並且確保在完成後調用NS_RELEASE,以免泄漏!)。

+0

但它給我的錯誤是:錯誤C2248:「nsDerivedSafe ::的AddRef」:不能訪問類的nsDerivedSafe 「 – Xinus 2009-10-01 18:18:36

+0

聲明爲private成員,我懷疑這是一個編譯器的問題或者您沒有公開從nsISupports繼承。 – sdwilsh 2009-10-02 06:13:30