gpt4 book ai didi

c++ - 如何控制(即中止)QScriptEngine 的当前评估

转载 作者:行者123 更新时间:2023-11-28 07:41:45 25 4
gpt4 key购买 nike

我使用 QScriptEngine::evaluate(QString code) 在我的 Qt 应用程序中评估 JavaScript .假设我评估了一段有问题的 JavaScript,它会永远循环(或者等待结果的时间太长)。我怎样才能中止这样的执行?

我想通过 GUI 中的两个按钮 RunAbort 来控制评估。 (但一次只允许执行一次。)

我想通过 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.

我是否缺少其他选项,也许是一些异步评估功能?

最佳答案

关于c++ - 如何控制(即中止)QScriptEngine 的当前评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15712341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com