2010-01-15 92 views
2

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

的问题是 - 如果我把QScriptEngineDebugger在同一个线程QScriptEngine(非GUI),比调试器会崩溃的调试 - 代码表明,它希望创建它的调试窗口,这样的窗口可以在GUI线程只创建。如果我将QScriptEngineDebugger放在GUI线程中,应用程序将崩溃,因为QScriptEngine不是线程安全的。任何见解?

回答

2

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

在幕后,QScriptEngineDebugger使用一个名为QScriptEngineDebuggerFrontend的类,该类反过来使用一个名为QScriptEngineDebuggerBackend的类,该类反过来直接调用引擎并将其自己的代理安装到引擎中。长话短说,调试器和引擎之间有很多耦合。

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

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