QML:WorkerScript的线程模型

pmf

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

本杰明·T

简短答案

所有WorkerScript都应在同一线程中执行。

答案不是那么简短

所有WorkerScriptinQQmlEngine都应在同一线程中执行。

长答案

WorkerScript在QML中创建时,您将实例化QQuickWorkerScriptC ++类。此类使用QQuickWorkerScriptEngine该类来处理所有线程性的东西。

现在,如果你看看QQuickWorkerScript::engine()QQmlEnginePrivate::getWorkerScriptEngine()你会看到,所有的WorkerScript对象都共享相同的QQuickWorkerScriptEngine情况下,只要它们共享相同的QQmlEngine

另外QQuickWorkerScriptEngineQThread(公有继承),并包含一个名为成员变量d类型QQuickWorkerScriptEnginePrivate *d通过处理的线程运行QQuickWorkerScriptEngine(见d->moveToThread(this)QQuickWorkerScriptEngine构造函数)。正是这样d,才能有效地在中运行异步工作QQuickWorkerScriptEnginePrivate::event()

聚苯乙烯

这种与Qt文档指出的矛盾

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

这可能会使您认为每个WorkerScript线程都是一个新线程。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章