我正在用数据采集卡做在线检测分析,需要即时保存数据、显示原始波形、分析结果,
数据采样率为100K,每次读10000个数据,我知道一个或多个生产者只能有一个消费者,
但我对消费者这个概念还是有点模糊,
请问,在下面的消费者结构图中,
我想实现的功能有:
1、实时存储数据tdms
2、显示波形图
3、对读取的数据进行变换
请问
1、我这个结构有什么问题
2、是不是存在数据错位的问题,也就是说,tdms存储时从队列中读出一个数据,这个数据是不是能够同时被2、3使用,会不会出现1可以用2、3不能用,或者2能用1、3不能用,或者3能用1、2不能用的现象
3、这样的消费者结构是不是太耗时,导致队列负担重
非常感谢
hi gangzi,
please read this article for the Producer/ Consumer pattern. Take note of how the Consumer loop is consuming the data...
1.生产/消费者结构的关键是“队列”的应用。“生产者”产生的数据也好,“消费者”消耗的数据也好,这个数据都是指“队列元素”,而不是你认为的数据采集卡采集到的数据。所以你程序中的TDMS保存的数据是“队列元素”,而不是你想得到的采集卡采集的数据;
2. “队列元素”怎么用?队列元素连接到case结构的选择器(就是那个“?”号),可以选择不同的case分支,而每个case分支都写好代码能实现相应的功能。比如,你的case分支有"measure"、“save data”、“show waveform”三个分支,(顾名思义)你在三个分支里写好实现测量、数据保存和波形显示的代码,然后你就可以用队列元素来控制什么时候测量、什么时候数据保存、什么时候波形显示;
3. 另外,阅读下状态机的结构,也许你能构建个更满意的软件构架。