gpt4 book ai didi

c++ - 带有 Lua 脚本的 Qt 应用程序架构 - 暂停执行

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:55 35 4
gpt4 key购买 nike

我的嵌入式项目包含一个用于PC 的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 函数传递到主线程。

有没有更流畅的方法?

最佳答案

Coroutines是实现这一点的一种方法。您的 pauseSimulation() 可以在内部调用 coroutine.yield(),稍后通过从按钮的调用 coroutine.resume() 重新启动行动。问题在于您的 UI 受脚本片段的支配,因为停止正在运行的协程的唯一方法是它最终调用 yield()

或者,您可以使用 Lanes模块将你的 Lua 应用程序的一部分放入一个单独的线程中。您将使用 Linda 将消息从主 Qt 小部件线程传递到模拟器的工作线程。这样做的好处是 UI 线程不会被在其自己的线程中运行的模拟阻塞。

关于c++ - 带有 Lua 脚本的 Qt 应用程序架构 - 暂停执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1382586/

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