QML:WorkerScript的线程模型

时间:2017-11-15 13:12:12

标签: qt concurrency qml worker

当使用QML WorkerScript时,请求(通过postMessage()发送)排队(并在单个处理程序线程上执行),还是存在两个连续postMessage()的可能性/危险性将同时在两个线程上执行?

1 个答案:

答案 0 :(得分:4)

简短回答

所有WorkerScript应该在同一个帖子中执行。

答案不是那么简短

WorkerScript中的所有QQmlEngine都应在同一个帖子中执行。

答案很长

在QML中创建WorkerScript时,实例化QQuickWorkerScript C ++类。这个类使用QQuickWorkerScriptEngine类来处理所有的事情。

现在,如果您查看QQuickWorkerScript::engine()QQmlEnginePrivate::getWorkerScriptEngine(),您会看到所有WorkerScript个对象将共享相同的QQuickWorkerScriptEngine个实例,只要它们共享相同的QQmlEngine实例QQuickWorkerScriptEnginePrivate::event() 1}}。

QQuickWorkerScriptEngine也是QThread(公共继承),包含d类型QQuickWorkerScriptEnginePrivate *的成员变量。 d正在QQuickWorkerScriptEngine处理的主题中运行d->moveToThread(this)(请参阅QQuickWorkerScriptEngine构造函数中的d)。正是这个WorkerScript将有效地运行Qt documentation中的异步工作。

PS

这种矛盾Code Signing certificate表明:

  

使用WorkerScript在新线程中运行操作。

这可能会让您认为每个static_cast都是新主题。