制作者/消费者用于与设备交谈

时间:2010-01-19 01:19:45

标签: c++ windows multithreading c++builder

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

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

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

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

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

    我的问题是,我在这里有嵌套的生产者/消费者模型吗?如果我的接收线程正在从设备消耗并且发送线程正在向设备产生,那么线程需要固有地通话才能使它们同步 - 对吗?同步我的工作以高效快速地与设备通信的最佳方法是什么?注意:我使用的是具有TThreads的C ++ Builder 5,可以使用关键部分和互斥锁。

    编辑:我也在使用轮询,所以我愿意使用WaitCommEvent,如果这样做会更好!

1 个答案:

答案 0 :(得分:1)

您认为需要同步哪些资源?

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

也许我错过了一些东西但是如果你有多个线程从队列中读取并且需要传输的命令需要按顺序排列,那么这应该变得复杂。所以尽量保持简单。