gpt4 book ai didi

c++ - 与设备串行对话的生产者/消费者

转载 作者:可可西里 更新时间:2023-11-01 13:27:28 25 4
gpt4 key购买 nike

这是我的问题:我必须能够通过串口发送和接收设备。这必须以多线程方式完成。流程如下:

  1. 等待设备向我发送内容 - 或者如果空闲,则查询状态以查看设备是否在线

  2. 如果设备向我发送某些内容,则处理消息、确认并告诉设备根据需要执行其他命令

现在,我有一个接收线程和一个发送线程。接收线程有一个 while 循环,它通过 ReadFile(...) 不断检查串行端口的一个字节。如果我有一个字节,那么我会开始构建缓冲区,然后解析数据以确定发送给我的内容。

发送线程获取读取线程定义的下一个命令,并通过 WriteFile 将其发送到同一 COM 端口。关键是我和设备之间有接收/发送关系。

我的问题是,这里是否有嵌套的生产者/消费者模型?如果我的接收线程正在从设备消费,而发送线程正在向设备生产,那么这些线程需要在本质上进行对话,以便它们是同步的——对吧?什么是同步我的努力以高效快速地与设备对话的最佳方式?注意:我使用的是 C++ Builder 5,它具有 TThreads 并且可以使用临界区和互斥量。

编辑:我也在使用轮询,所以如果 WaitCommEvent 效果更好的话,我也愿意使用它!

最佳答案

您正在共享哪些您认为需要同步的资源?

如果您在两个线程之间有类似队列的东西,那么这是一个非常经典的生产者/消费者模型。例如。如果您只有一个线程读取命令,然后将命令放入队列,而另一个线程从队列中提取、处理命令并写入设备,那么您需要使用互斥锁或信号量同步对队列的访问。

也许我遗漏了一些东西,但只有当您有多个线程从队列中读取并且需要传输的命令需要保持有序时,这才会变得复杂。所以尽量保持简单。

关于c++ - 与设备串行对话的生产者/消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2090442/

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