【问题标题】:Qt: How to connect QScriptEngineDebugger to QScriptEngine in separate thread?Qt:如何在单独的线程中将 QScriptEngineDebugger 连接到 QScriptEngine?
【发布时间】:2010-01-18 06:29:56
【问题描述】:

我需要在单独的非 GUI 线程中处理脚本,因为脚本调用 C++ 函数可能需要很长时间来处理(秒)。是否可以在非 gui 线程中将QScriptEngineDebugger 连接到我的QScriptEngine

问题是 - 如果我将 QScriptEngineDebuggerQScriptEngine (非 gui)放在同一线程中,那么调试器将在调试时崩溃 - 代码显示它想要创建它的调试窗口,并且只能创建这样的窗口在 GUI 线程中。如果我将QScriptEngineDebugger 放在GUI 线程应用程序将崩溃,因为QScriptEngine 不是线程安全的。有什么见解吗?

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    除非您准备编写自己的脚本调试器,否则似乎没有办法在与引擎不同的线程中运行调试器。

    在幕后,QScriptEngineDebugger 使用了一个名为 QScriptEngineDebuggerFrontend 的类,而后者又使用了一个名为 QScriptEngineDebuggerBackend 的类,后者又对引擎进行了许多直接调用并将其自己的代理安装到引擎中。长话短说,调试器和引擎之间有很多耦合。

    另一种方法是将耗时的 C++ 函数封装在一个类中,该类在后台线程中运行耗时的函数,并在耗时的函数完成时发出信号。然后,将信号连接到脚本中的函数以处理结果。请参阅以下文档,了解如何将来自 C++ 对象的信号连接到脚本中的函数:

    http://doc.trolltech.com/4.5/qtscript.html#using-signals-and-slots

    【讨论】:

      猜你喜欢
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多