繁体   English   中英

在C中使用多线程进行串行端口编程

[英]Serial port programming with multi-thread in C

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

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

第二个问题:如果我使用多线程,我希望能够在需要时写入数据,因此我必须找到一种方法来停止/休眠写入过程中的读取线程,也许使用pthread_cond_wait。 我对吗? 我看过轮询和选择功能,但我不太了解它们,并且不确定它们是否与规范模式兼容。

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

谢谢您的帮助。

在这里,将GUI与串行端口分开的主要考虑因素是延迟。 您是否要执行任何操作,这些操作将导致您需要在端口上轮询用户可以察觉的特定时间? 如果您只是在进行请求/答复,而这些请求的延迟确实很低,那么您的用户可能不会注意到这些延迟。 另外,接收那些异步错误消息也不会引起我想像的任何形式的明显延迟。 除非您知道某个Init消息或类似的消息发送到控制器后可能会有许多秒的延迟,否则使应用程序保持单线程可能会使您的工作变得更加简单。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM