NI LabVIEW,CVI,数据采集等产品讨论区

cancel
Showing results for 
Search instead for 
Did you mean: 

生产者消费者队列如何在处理完数据后才停止?

Solved!
Go to solution

因为数据处理和写入文件速度跟不上采集,所以采用了两个while循环作为生产者和消费者,和范例类似使用错误消息连接停止按钮。但是发现一旦停止,生产的还未进行消费的数据也一并丢失。请问如何才能在停止采集后等待所有数据处理完毕再关闭消费者队列?

0 Kudos
Message 1 of 7
(254 Views)

关闭消费者队列之前, 一次性读入所有还未处理的数据, 写入文件后再关闭消费者队列.

 

George Zou
0 Kudos
Message 2 of 7
(219 Views)

错误连接停止的话就代表退出循环了,这个while框图停止,把采集到的数据连接到while框图,在退出while的时候处理应该可以

0 Kudos
Message 3 of 7
(208 Views)

谢谢回复,请问更具体点是怎么操作呢?我是Labview新手,基本模仿了队列的范例。我尝试将释放队列的remaining elements进行写入电子表格,但是只能新建一个文件来写入,没办法补充到消费者循环写入的文件里

0 Kudos
Message 4 of 7
(202 Views)

谢谢回复,但是我是个新手不太明白,是指新建一个while来专门处理队列停止后还存在队列里的数据吗?我之前尝试把消费者while里的停止用按钮来控制而不是错误信息,但是一旦按了生产者的停止按钮,消费者循环的队列就报错了

0 Kudos
Message 5 of 7
(193 Views)

你是不是在生产者循环外连接了队列关闭,消费者找不到队列自然就报错了,while循环是循环结束才执行循环后面的框图,生产者while停止后执行while后面的框图,消费者循环还在继续执行,如果引用等没有找到就会报错,另外可以加探针或者高亮执行确定错误出在什么地方,也可以查错误代码找是什么错误

0 Kudos
Message 6 of 7
(158 Views)
Solution
Accepted by topic author siriusJ

将生产者采集的数据写入一个数组,在消费者循环中索引该数组进行数据处理与写入,当索引+1大于数组元素数量中止消费者循环,这样在你按下停止采集后消费者循环就会在处理完所有数据后才停止,大概这么个意思吧。这种只适用于你说的处理跟不上采集的情况,我在两个循环中设置了不同的时间间隔模仿你说的情况。

0 Kudos
Message 7 of 7
(144 Views)