我的嵌入式项目包含一个用于PC的Qt应用程序,主要是用于调试和测试的模拟器。在应用程序中,我可以创建多个小部件,代表我的嵌入式软件或模拟由应用程序控制的硬件,或者可以生成用于测试的外部输入。使用Lua脚本编写Qt应用程序的架构 - 暂停执行
我打算通过添加Lua脚本来改进应用程序,以便可以从脚本创建或控制小部件。我需要一个优雅的方式来单步执行脚本。 我打算像脚本:
createThermometerWidget(10,20,30)
while time < maxTime do
setTemperature(20+time/1000)
pauseSimulation()
time = time + 1
end
自定义功能pauseSimulation
应停止Lua的脚本,使Qt的事件循环使运行与软件交互可能(塞汀例如其他投入),并按下一个按钮后该脚本将继续。
我的第一个想法是为Lua执行创建一个单独的线程,该线程将被pauseSimulation
停止并由按钮释放。但Qt小部件不能从非主线程创建,所以我将不得不在主线程中创建所有小部件,并将所有构造函数参数从Lua函数传递到主线程。
有没有更流畅的方法?
非常感谢。 – danatel 2009-09-05 18:12:08
Qt有不错的多线程支持。你可以使用QThreads而不是Lanes来同步lua和Qt的GUI。 Lua的线程可以在只接收来自GUI的消息并恢复不同协程的循环中工作。少一个外部图书馆担心。 – 2009-09-08 18:01:37
我唯一担心的是Lua本身不一定是线程安全的或线程感知的。在每个线程中保持单独的Lua状态是安全的,但只能从该线程内访问该状态。如果Qt绑定到Lua可以很容易实现,那么这是一个很好的解决方案。通道提供了OS线程之间安全同步的数据传输,解决了一些问题。 – RBerteig 2009-09-08 23:52:16