使用QML时WorkerScript
,请求(通过发送postMessage()
)是否排队(并在单个处理程序线程上执行),或者是否有可能/危险postMessage()
在两个线程上同时执行两个连续的请求?
所有WorkerScript
都应在同一线程中执行。
所有WorkerScript
inQQmlEngine
都应在同一线程中执行。
WorkerScript
在QML中创建时,您将实例化QQuickWorkerScript
C ++类。此类使用QQuickWorkerScriptEngine
该类来处理所有线程性的东西。
现在,如果你看看QQuickWorkerScript::engine()
和QQmlEnginePrivate::getWorkerScriptEngine()
你会看到,所有的WorkerScript
对象都共享相同的QQuickWorkerScriptEngine
情况下,只要它们共享相同的QQmlEngine
。
另外QQuickWorkerScriptEngine
是QThread
(公有继承),并包含一个名为成员变量d
类型QQuickWorkerScriptEnginePrivate *
。d
通过处理的线程运行QQuickWorkerScriptEngine
(见d->moveToThread(this)
的QQuickWorkerScriptEngine
构造函数)。正是这样d
,才能有效地在中运行异步工作QQuickWorkerScriptEnginePrivate::event()
。
这种与Qt文档指出的矛盾:
使用WorkerScript在新线程中运行操作。
这可能会使您认为每个WorkerScript
线程都是一个新线程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句