0

我正在编写一个 gtk 应用程序(在 C++ 中)以通过串行端口与电机控制器进行通信。我正在使用 Linux Ubuntu 和 termios lib。我需要有关最佳解决方案的建议。所以这里是我的限制: 1- 当我发送请求时,控制器给我发回一条消息 2- 如果发生错误,控制器可以随时向我发送错误通知 3- 请求是 ANSII 字符串以 [CR 结尾] 4- 控制器答案是 ANSII 字符串以 [CR][NL] 结尾

由于(3)和(4),我认为在CANONICAL模式下配置串口是合适的。由于 GUI + (2),我想到了多线程:一个在串口上写入用户请求的主线程和另一个读取控制器答案的无限线程。你认为这是个好主意吗?

第二个问题:如果我使用多线程,我希望能够在需要时写入数据,所以我必须找到一种方法来在写入过程中停止/休眠读取线程,也许可以使用 pthread_cond_wait。我对吗?我见过 poll 和 select 函数,但我不太了解它们,我不确定它们是否与规范模式兼容。

我开始使用多线程和串行端口。我在谷歌,论坛上阅读了很多东西......但是大量的信息对于初学者来说有点不知所措。

谢谢您的帮助。

4

1 回答 1

0

将 GUI 与串行端口分开时要考虑的主要问题是延迟。您是否会执行任何会导致您需要在特定时间内轮询端口的操作,这对用户来说是显而易见的?如果您只是在进行请求/回复并且这些延迟非常低,您的用户可能不会注意到任何这些延迟。此外,接收这些异步错误消息也不会导致我想象的任何明显的延迟。除非您知道在 Init 消息或类似消息发送到控制器之后可能会有数秒延迟的事实,否则保持应用程序单线程可能会让您的生活变得更加简单。

另一方面,如果会有很大的延迟,或者你只想搞乱多线程,我会从一个执行所有 GUI 工作的线程和另一个处理所有串行 IO 的线程开始。在这两个线程之间使用消息传递或事件通知来协调您的活动,它应该非常简单。

于 2013-03-22T13:07:27.883 回答