问:如何在单独的线程中将QScriptEngineDebugger连接到QScriptEngine?

时间:2010-01-15 08:34:03

标签: c++ qt

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

问题是 - 如果我将QScriptEngineDebugger放在与QScriptEngine(非gui)相同的线程中,而调试器将在调试时崩溃 - 代码显示它想要创建它的调试窗口和这样的窗口只能在GUI线程中创建。如果我在GUI中放置QScriptEngineDebugger线程应用程序将崩溃,因为QScriptEngine不是线程安全的。任何见解?

1 个答案:

答案 0 :(得分:2)

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

在幕后,QScriptEngineDebugger使用了一个名为QScriptEngineDebuggerFrontend的类,后者又使用了一个名为QScriptEngineDebuggerBackend的类,后者又对引擎进行了多次直接调用并安装了自己的代理进入发动机。简而言之,调试器和引擎之间存在很多耦合。

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

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