- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 QScriptEngine::evaluate(QString code)
在我的 Qt 应用程序中评估 JavaScript .假设我评估了一段有问题的 JavaScript,它会永远循环(或者等待结果的时间太长)。我怎样才能中止这样的执行?
我想通过 GUI 中的两个按钮 Run
和 Abort
来控制评估。 (但一次只允许执行一次。)
我想通过 QtConcurrent::run
运行脚本, 保持 QFuture
并调用cancel()
当按下 Abort
时。但是文件说我不能中止这样的处决。似乎 QFuture
仅在处理完作业中的当前项目后才取消,即在减少或过滤集合时。但是对于 QtConcurrent::run
这意味着我不能使用 future 来中止它的执行。
我想到的另一种可能性是使用 QThread
并调用quit()
,但我有一个类似的问题:它只会在/一旦它在事件循环中等待时取消线程。但由于我的执行是单个函数调用,所以这也不是一个选择。
QThread
还有 terminate()
,但文档让我有点担心。虽然我的代码本身不涉及互斥锁,但也许 QScriptEngine::evaluate
在幕后起作用?
Warning: This function is dangerous and its use is discouraged. The thread can be terminated at any point in its code path. Threads can be terminated while modifying data. There is no chance for the thread to clean up after itself, unlock any held mutexes, etc. In short, use this function only if absolutely necessary.
我是否缺少其他选项,也许是一些异步评估功能?
最佳答案
http://doc.qt.io/qt-4.8/qscriptengine.html#details
它有几个部分可以解决您的问题:
http://doc.qt.io/qt-4.8/qscriptengine.html#long-running-scripts
http://doc.qt.io/qt-4.8/qscriptengine.html#script-exceptions
http://doc.qt.io/qt-4.8/qscriptengine.html#abortEvaluation
http://doc.qt.io/qt-4.8/qscriptengine.html#setProcessEventsInterval
希望对您有所帮助。
关于c++ - 如何控制(即中止)QScriptEngine 的当前评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15712341/
给出这段代码,我得到:“对'QScriptEngine::QScriptEngine() 的 undefined reference ” #include ... QScriptEngine e;
有人可以向我解释如何在 QScriptEngine 扩展中获得命名空间吗?我已经设置好了,所以我在 script/下有一个目录 foo/,其中正在执行一个 __init__.js 文件。 __setu
我想通过这个方法: QScriptValue ScriptProcessContext::construct(QScriptContext * ctx, QScriptEngine *) {
[问题] 假设我们喂 QScriptEngine使用以下脚本: var foo = 1; var bar = 2; foo + bar 来自QScriptEngine::evaluate() ,我们会
我使用 QScriptEngine::evaluate(QString code) 在我的 Qt 应用程序中评估 JavaScript .假设我评估了一段有问题的 JavaScript,它会永远循环(
我创建了一个 QScriptEngine 并公开了一个我可以从 js 脚本调用的对象函数。 engine->globalObject().setProperty("obj", myObj); myOb
我正在尝试优化我的一个函数中的 QScriptEngine 操作。 函数名为executeCustomJSOperation,它在多个文件中执行相同的JS代码。但是,每个文件都需要更改名为 $xmlD
让我们以一个简单的类为例: QScriptEngine engine; class MyClass { public: QScriptValue foo(QScriptContext*, QS
我需要访问 QWebFrame 中的 javascript QScriptEngine。这可能吗? 好吧,至少我认为我需要访问它。为了响应 javascript 调用,我需要分配一个新对象,将其返回给
我需要实现一个简单的数学表达式计算器,例如 1+2*(3.4 + 0.1) 我认为使用实现这些东西会很容易 QScriptEngine::evaluate() 但是有一个问题:一些无效的表达式被认为是
我需要在单独的非 GUI 线程中处理脚本,因为脚本调用 C++ 函数可能需要很长时间才能处理(秒)。是否可以在非 gui 线程中将 QScriptEngineDebugger 连接到我的 QScrip
我正在尝试将 QVariantMap 转换为 Qt Script 对象。如果我理解正确的话,它应该是这样的: QScriptEngine* engine = new QScriptEngine();
在Qt 4.8 的脚本引擎中,“本地”变量可以通过obtaining a QScriptContext from QScriptEngine::pushContext then setting the
[背景] QScriptEngine 的默认print() 函数将结果打印到 Qt Creator IDE 的终端以进行调试。因此,如果我们要自己制作 ECMA 脚本解释器,则必须将输出重定向到我们的
我是一名优秀的程序员,十分优秀!