- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想从 QtScript 脚本运行多个并发作业:
function job1() { ... }
function job2() { ... }
runConcurrentJobs(job1, job2)
作业本质上是一系列远程过程调用 (ZeroC Ice),需要在多个点进行同步。
Qt 4.8.0 文档没有提及QScriptEngine
线程安全。我的问题:
使用单个 QScriptEngine
从多个线程同时执行 QtScript 函数是否安全?
您会推荐什么方法来完成任务?
注意事项:
最佳答案
QScriptEngine
被记录为“可重入”,这意味着,本质上,您可以在多线程中使用它,但每个线程只能使用一个 QScriptEngine
。
现在,如果函数 job1()
和 job2()
可以同时运行,原则上应该可以将它们分成两个不同的 QScriptEngine
s(简单,如果两个函数都不使用局部变量,只有,更难,如果涉及全局变量)。
runConcurrentJobs()
实现为 Q_INVOKABLE
函数(或槽)。在那里,做类似的事情
void runConcurrently (const QString &functionname1, QString &functionname2) {
MyScriptThread thread1 (functionname1);
MyScriptThread thread2 (functionname2);
thread1.start();
thread2.start();
thread1.wait ();
thread2.wait ();
// optionally fetch return values from the threads and return them
}
MyScriptThread 派生自 QThread 并大致如下实现 QThread::run():
void MyScriptThread::run () {
QScriptEngine engine;
engine.evaluate (common_script_code);
result = engine.evaluate (the_threads_function);
// the_threads_function passed as a QScriptProgram or QString
}
关于c++ - QtScript 和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8893571/
现在我可以使用 QScriptEngine 来加载和执行 test.js 文件。在那个 test.js 的函数之一中,我想调用位于另一个 .js 文件中的另一个函数。我该怎么做? 最佳答案 要从多个文
QScriptEngine有evaluate()方法,可用于加载脚本、执行脚本以及从已加载的脚本运行指定的函数。但是如何清除当前脚本并加载新脚本呢?例如,我使用评估()从文件加载脚本,然后使用评估()
我正在使用 Qt5,并尝试学习如何使应用程序可编写脚本。 为此,我创建了一个包含一些文本编辑、标签等的主窗口。然后我添加了一个名为“脚本控制台”的选项”到该表单的菜单,以便我打开第二个表单,其中仅包含
我想从 QtScript 脚本运行多个并发作业: function job1() { ... } function job2() { ... } runConcurrentJobs(job1, job
当我调用这段代码时: QScriptEngine e; e.evaluate("print('hello, world!')"); 输出文本(来自 print 方法)被写入主应用程序的终端。 有什么方
我知道有一些工具可以分析纯 javascript 代码,例如 firebug 和 Chrome 的开发者工具,但我想知道是否有任何好的工具来分析 QTScript。或者我如何使用这些工具来分析 QtS
问题 我正在制作一个使用 Q_OBJECT 和 Q_PROPERTY 从脚本访问一些对象的项目。我有两个问题: 使使用前向声明的类可编写脚本 返回一个属性作为指针 说明 1. 为什么要提前申报? 类
解决方案可能很简单。话又说回来,这可能是不可能的。 我有基础回调类: class CFCallback { int command_; int transfer_rate_;
我遇到了以下错误 "TypeError: cannot call sayHello(): argument 2 has unknown type `QString&' (register the ty
我必须在 C++ 应用程序中运行一系列 javascript“脚本”。其中大部分是重复 Action 。代码示例 here . 我知道 Qt,因为第 5 版包含 2 个 javascript 引擎:Q
QtScript 是否支持内省(introspection)/反射(例如,像 python 的 dir() 一样),使我能够通过在运行时探索对象模型来从内部“映射”API? 最佳答案 你真的应该更多地
我正在学习 QtScript 并写了几个简单的例子。如果我将参数限制为简单类型,则映射很简单。 我现在希望能够将可变数量的参数从 QtScript 传递到 C++ 类,例如 Myobject.add(
函数 qScriptValueFromSequence 允许我从 QObjectList 在 QtScript 中创建一个数组,当我在脚本中修改 QObject 属性时,QObject 属性会发生变化
我通过创建派生的 QThread 类使我的应用程序可编写脚本,我在其中添加多个 QObject 类以便通过命令行访问它们的功能。 void commandLine::addObject(QObject
我已经编写了一个自定义类,它可以通过原型(prototype)在 QtScript 中使用。还有另一个全局类可用,它应该用于打印在 QtScript 中生成的自定义类。 这是我的自定义类(非常简单;)
有谁知道是否有可能拥有一个带有重载运算符(如 +、-、*)的 C++ 类,并以某种方式(这就是魔法发生的地方)向 QtScriptEngine 声明它,以便像 "a+b 这样的 js 表达式"是否像在
我在我的应用程序中使用 Qt 脚本引擎作为用户访问其功能的替代方式。因此,我将一些 C++ 类导出到 Qt ScriptEngine,它将作为应用程序的接口(interface)。问题是,这些 C++
我正在使用 QtScript 来自动化我的应用程序的某些部分以用于开发和测试目的。我已经到了要测试断言的地步,并且基于 "standalone assertion libraries?"以及我在 De
我试图找出如何在 QtScript 中使用复数,以便可以从 QtScript 调用用复数参数定义的槽。用户还应该可以从脚本访问复数的基本代数(+、-、exp、...)。 只是为了说明,我想调用的是:
我已经在 Windows 下为 64 位架构编译了 Qt,除了 QtScript 之外,其他都运行良好。以下简单代码,与 32 位 Qt for Windows 完美配合,如果使用 64 位 Qt 编
我是一名优秀的程序员,十分优秀!