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