我想从QtScript脚本中运行几个并发作业:
function job1() { ... }
function job2() { ... }
runConcurrentJobs(job1, job2)作业--本质上是一个远程过程调用序列(ZeroC Ice),需要在几个点进行同步。
Qt4.8.0文档没有提到QScriptEngine线程安全。我的问题:
QScriptEngine同时从多线程执行QtScript函数安全吗?备注:
发布于 2014-11-05 21:06:00
QScriptEngine被记录为“可重入者”,这意味着您可以使用多线程,但每个线程只能使用一个QScriptEngine。
现在,如果函数job1()和job2()完全可以同时运行,原则上应该可以将它们分离成两个不同的QScriptEngine(如果两个函数都不使用局部变量,那么就容易了,如果涉及全局,则更困难)。
runConcurrentJobs()实现为C++中的Q_INVOKABLE函数(或插槽)。void runConcurrently (const QString &functionname1,QString &functionname2) { MyScriptThread thread1 (functionname1);MyScriptThread thread2 (functionname2);thread1 1.start ();线程2.start ();线程1.WAIT();QString 2.WAIT();//可选地从线程获取返回值并返回}
common_script_code::run () { QScriptEngine engine;engine.evaluate (common_script_code);result = engine.evaluate ( the_threads_function );// the_threads_function作为QScriptProgram或QString }传递
发布于 2012-01-17 12:24:40
一般来说,如果文档没有提到线程处理,那么它就不是线程安全的。
https://stackoverflow.com/questions/8893571
复制相似问题