单个C ++ / Qt5应用具有多个独立的JavaScript引擎实例是否正常?在我的应用程序中,我有几个QObject继承的对象,它们充当独立的数据处理单元。在每个脚本中,我都希望能够启动JS脚本,并且希望这些脚本的上下文在这些单元之间是独立的。最简单的想法是使每个单元都具有自己的QJSEngine实例。一个简单的测试显示,如果我在同一个应用程序中创建两个引擎并在其中一个中设置自定义全局属性,则第二个引擎不知道该属性,这就是我想要的。但是仍然不很明显,没有一些QJSEngine的所有实例都共有的全局状态属性。 Qt官方文档中似乎从未提到多个实例的问题。足以得出拥有多个实例不会造成问题的结论吗?
答案 0 :(得分:1)
Qt文档通常是明确的,因此如果禁止创建2 QJSEngine
,则会将其写入文档中,并且在运行时会出现警告或断言失败。
例如,如果尝试创建2个QCoreApplication
实例,最终将导致崩溃,并显示以下错误:
ASSERT failure in QCoreApplication: "there should be only one application object", file kernel\qcoreapplication.cpp, line 792
由于QJSEngine
没有这样的通知/警告/声明,因此创建多个实例应该是绝对安全的。
如果您还希望获得其他提示,可以查看QQuickWidget
。不论是否存在任何其他QQmlEngine
或QJSEngine
实例,该窗口小部件都会根据需要创建自己的QJSEngine
(即QQmlEngine
)。