小编LBe*_*nny的帖子

XPCOM C++多线程和javascript回调

背景

在12.0以下的XULRunner版本中,它可以工作,但是当我尝试将其移植到12.0或更高版本时,它会使应用程序崩溃.主要原因是在sdk v12或更新的开发人员中删除代理对象到xpcom组件并建议通过使用nsRunnable/nsIRunnable包装对象来替换它,并通过函数NS_DispatchToMainThread将调用路由到主线程(单击此处)

我正在开发什么?

我创建了db连接器,它通过回调与主线程异步和通信.使用:XULRunner v6,移植到XULRunner v17或更高版本



    //nsIDBCallback.idl
    [scriptable, function, uuid(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)]
    interface nsIDBCallback : nsISupports {
       void onInfo(in long phase, in long status, in string info);
    }

Run Code Online (Sandbox Code Playgroud)


    //nsDBService.h, it is XPCOM component 
    class nsDBService : public nsIDBService, nsIRunnable
    {
    public:
       NS_DECL_ISUPPORTS
       NS_DECL_NSIRUNNABLE
       NS_DECL_NSIDBSERVICE

    private:
       std::vector<nsIThread*>     threads;
       std::vector<nsIDBCallback*> callbacks;
       std::vector<const char*>    sqls;

       nsIThread* makeNewThread();
       void       runOperationIfNotBussy();

    public:
       NS_IMETHODIMP Query(const char *sql, nsIDBCallback *callback);
    }

Run Code Online (Sandbox Code Playgroud)


    //nsDBService.cpp
    // adding query and other data to buffers, 
    // it's thread safe, there are …
Run Code Online (Sandbox Code Playgroud)

javascript c++ multithreading xul xpcom

7
推荐指数
1
解决办法
464
查看次数

标签 统计

c++ ×1

javascript ×1

multithreading ×1

xpcom ×1

xul ×1