在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)