我正在编写一个gtk应用程序(用C ++编写),通过串口与电机控制器通信。我正在使用Linux Ubuntu和termios lib。 我需要有关最佳解决方案的建议。 所以这是我的约束: 1-当我发送请求时,控制器发回给我一条消息 2-如果发生错误,控制器可以随时向我发送错误通知 3-请求是用[CR]完成的ANSII字符串 4-控制器答案是用[CR] [NL]
完成的ANSII字符串由于(3)和(4),我认为在CANONICAL模式下配置串口是合适的。 由于GUI +(2),我想到了多线程:在串口上写用户请求的主线程和读取控制器答案的其他无限线程。你认为这是个好主意吗?
第二个问题:如果我使用多线程,我希望能够在需要时编写数据,因此我必须找到一种方法来在写入期间停止/休眠读取线程,可能是使用pthread_cond_wait。我对吗?我已经看过民意调查和选择功能,但我不太了解它们,我不确定它们是否与规范模式兼容。
我开始使用多线程和串口。我在谷歌,论坛上阅读了很多东西......但是大量的信息对初学者来说有点压倒性。
感谢您的帮助。
答案 0 :(得分:0)
这里要考虑的将GUI与串口分开的主要问题是你的延迟。您是否会执行任何会导致您需要在特定时间内轮询端口的操作,这对用户来说是显而易见的?如果您只是在进行请求/回复,并且这些延迟非常低,您的用户可能不会注意到任何延迟。另外,接收这些异步错误消息也不会导致我想象的任何明显的延迟。除非你知道在Init消息之后可能会有很多秒的延迟,或者类似的东西被发送到控制器,否则它可能会让你的生活更加简单,以保持应用程序的单线程。
另一方面,如果存在那些大的延迟或者你只是想要使用多线程,我只会从1个执行所有GUI工作的线程和另一个处理所有串行IO的线程开始。使用这两个线程之间的消息传递或事件通知来协调您的活动,这应该非常简单。