0

XPCOMコンポーネントからスレッドを作成したい...これはそのためのコードです

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;
}

};
4

1 に答える 1

1

スレッドを開始するコードがスコープ外になると、nsCOMPtr はオブジェクトを解放し、その参照カウントをゼロにします。この時点で、オブジェクトは削除されます。スコープから外れる前に NS_ADDREF を呼び出す必要があります (そして、リークしないように、完了したら必ず NS_RELEASE を呼び出してください!)。

于 2009-10-01T17:58:59.177 に答える