管理异步通信:如何检查在另一个线程中收到的响应

Managing asynchronous communication: how to examine response received in another thread

本文关键字:线程 另一个 响应 异步通信 何检查 检查 管理      更新时间:2023-10-16

我有一个调度程序线程和一个侦听器线程。当我调度命令时,我想在发送后续命令之前等待响应。此外,我需要检查响应,然后才能继续执行第二个命令,其中至少是确认已收到响应并且一切正常。我的伪代码如下:

void MainWindow::downloadData()
{
    dispatcher->getInfo(); // sends command
    // QString response = receiver->response() // idealy I would like to check response but since its async, i can't really do that!
    dipatcher->askData(); // the 2nd command and so forth
}

有什么优雅的方法可以解决这个问题吗?我能想到的唯一方法是如果我使用相同的线程并且所有调用都阻塞,但这不一定是一个好的解决方案。

在Qt中,我可以使用信号和插槽以级联方式连接它们,因此当第一个信号被触发时,它会启动整个操作序列(每个插槽发出一个新信号),但看起来也很脏。

处理异步事件和处理这些事件的操作链/图的最可靠方法之一是FSM。 Qt为使用其Qt-State机器框架实现FSM提供了基础。我建议走这条路。不幸的是,Qt for FSM提供的所有示例都涉及GUI和动画。

FSM

方法的优点是,FSM既可以表示为图形,也可以表示为表格。第一个选项非常适合理解,第二个选项非常适合验证,没有无休止的循环和"死胡同"。

我在Qt-FSM框架的基础上构建了自己的框架,用于用特定领域的语言定义FSM。我用它来控制一台复杂的机器,该机器有几个传感器参与者,所有参与者都异步工作。使用DSL可以帮助我在更高的抽象中实现 - 在FSM图的抽象级别。