从线程调用XPCOM函数时Firefox崩溃

时间:2009-10-01 16:37:39

标签: multithreading firefox-addon xpcom

我想从XPCOM Component创建一个线程... 这是

的代码
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 个答案:

答案 0 :(得分:1)

当开始线程的代码超出范围时,nsCOMPtr将释放该对象,将其引用计数设置为零。此时,该对象将被删除。在你超出范围之前你需要调用NS_ADDREF(当你完成它之后一定要调用NS_RELEASE,这样你就不会泄漏!)。