Qt QML:WorkerScript的线程模型

Qt QML:WorkerScript的线程模型,qt,concurrency,qml,worker,Qt,Concurrency,Qml,Worker,使用QMLWorkerScript时,请求(通过postMessage()发送)是否排队(并在单个处理程序线程上执行),或者是否存在两个连续的postMessage()将同时在两个线程上执行的可能性/危险?简短回答 所有WorkerScript都应在同一线程中执行 回答不那么简短 QQmlEngine中的所有WorkerScript都应在同一线程中执行 长话短说 在QML中创建 WorksScript < /C> >,实例化 QQuickWorkerScript < /Cord> C++类。这个

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

简短回答 所有
WorkerScript
都应在同一线程中执行

回答不那么简短
QQmlEngine
中的所有
WorkerScript
都应在同一线程中执行

长话短说

在QML中创建<代码> WorksScript < /C> >,实例化<代码> QQuickWorkerScript < /Cord> C++类。这个类使用

qquickworkersscriptengine
类来处理所有繁琐的事情

现在,如果您查看,您将看到所有
WorkerScript
对象将共享相同的
qquickworkerscript引擎
实例,只要它们共享相同的
qqqmlengine

另外,
qquickworkersscriptengine
是一个
QThread
(公共继承),包含一个名为
d
的成员变量,类型为
qquickworkersscriptengineprivate*
d
正在由
QQuickWorkerScriptEngine
处理的线程中运行(请参阅
d->moveToThread(此)
中的
QQuickWorkerScriptEngine
构造函数)。正是这个
d
将在中有效地运行异步工作

附言 这种说法与下述说法相矛盾:

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


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

“这可能会让你认为每个WorkerScript都是一个新线程”是的,这就是促使我提出这个问题的原因。对于未来,WorkerScript的线程池大小对于需要多个执行器的情况来说是很好的。