diff --git a/doric-Qt/doric/async/async_call.h b/doric-Qt/doric/async/async_call.h index f9ec5fab..c945c06a 100644 --- a/doric-Qt/doric/async/async_call.h +++ b/doric-Qt/doric/async/async_call.h @@ -8,7 +8,7 @@ class AsyncCall { public: static void ensureRunInThreadPool(QThreadPool &threadPool, QRunnable *runnable) { - + threadPool.start(runnable); } }; diff --git a/doric-Qt/doric/context.h b/doric-Qt/doric/context.h index 03fd73ce..1cfd6117 100644 --- a/doric-Qt/doric/context.h +++ b/doric-Qt/doric/context.h @@ -12,7 +12,7 @@ private: QString source; QString script; QString extra; - InterfaceDriver *driver; + InterfaceDriver *driver = NULL; public: Context(QString contextId, QString source, QString extra); diff --git a/doric-Qt/doric/context_manager.h b/doric-Qt/doric/context_manager.h index 6df2cd56..374b71c7 100644 --- a/doric-Qt/doric/context_manager.h +++ b/doric-Qt/doric/context_manager.h @@ -33,7 +33,7 @@ public: int contextId = counter->fetchAndAddOrdered(1); Context *context = new Context(QString::number(contextId), source, extra); contextMap->insert(QString::number(contextId), context); - context->driver->createContext(contextId, script); + context->getDriver()->createContext(QString::number(contextId), script, source); return context; } }; diff --git a/doric-Qt/doric/doric.pro.user b/doric-Qt/doric/doric.pro.user index 03539434..139c9ffe 100644 --- a/doric-Qt/doric/doric.pro.user +++ b/doric-Qt/doric/doric.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/doric-Qt/doric/engine/js_engine.h b/doric-Qt/doric/engine/js_engine.h index eb12bdf7..4a6dabd6 100644 --- a/doric-Qt/doric/engine/js_engine.h +++ b/doric-Qt/doric/engine/js_engine.h @@ -10,7 +10,6 @@ class JSEngine : public QObject { Q_OBJECT private: - QThreadPool mJSThreadPool; InterfaceJSE *mJSE; void loadBuiltinJS(QString assetName); @@ -18,6 +17,8 @@ private: QString packageContextScript(QString contextId, QString content); QString packageModuleScript(QString moduleName, QString content); public: + QThreadPool mJSThreadPool; + explicit JSEngine(QObject *parent = nullptr); QJSValue invokeDoricMethod(QString method, QJSValueList arguments); diff --git a/doric-Qt/doric/main.cpp b/doric-Qt/doric/main.cpp index 978b8e9b..e3a7a0cf 100644 --- a/doric-Qt/doric/main.cpp +++ b/doric-Qt/doric/main.cpp @@ -4,6 +4,8 @@ #include "engine/js_engine.h" #include "async/async_result.h" +#include "context_manager.h" +#include "utils/utils.h" int main(int argc, char *argv[]) { @@ -22,5 +24,8 @@ int main(int argc, char *argv[]) JSEngine jsEngine; + QString script = Utils::readAssetFile("doric", "Snake.js"); + ContextManager::getInstance()->createContext(script, "", ""); + return app.exec(); } diff --git a/doric-Qt/doric/native_driver.cpp b/doric-Qt/doric/native_driver.cpp index e6361f04..5404b425 100644 --- a/doric-Qt/doric/native_driver.cpp +++ b/doric-Qt/doric/native_driver.cpp @@ -1,4 +1,5 @@ #include "native_driver.h" +#include "async/async_call.h" void NativeDriver::invokeContextEntityMethod(QString contextId, QString method, QList args) { @@ -12,7 +13,17 @@ void NativeDriver::invokeDoricMethod(QString method, QList args) void NativeDriver::createContext(QString contextId, QString script, QString source) { + class Runnable: public QRunnable + { + void run() override + { + qDebug() << "123"; + } + }; + Runnable *runnable = new Runnable(); + runnable->setAutoDelete(true); + AsyncCall::ensureRunInThreadPool(jsEngine.mJSThreadPool, runnable); } void NativeDriver::destroyContext(QString contextId)