gpt4 book ai didi

c++ - C语言多线程串口编程

转载 作者:太空宇宙 更新时间:2023-11-04 04:17:31 25 4
gpt4 key购买 nike

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

结束

由于(3)和(4),我认为将串口配置为CANONICAL模式是合适的。由于 GUI + (2),我考虑了多线程:一个主线程在串行端口上写入用户请求,另一个无限线程读取 Controller 答案。您认为这是个好主意吗?

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

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

感谢您的帮助。

最佳答案

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

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

关于c++ - C语言多线程串口编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15568165/

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