From 04:00 PM CDT – 08:00 PM CDT (09:00 PM UTC – 01:00 AM UTC) Tuesday, April 16, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

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

取消
显示结果 
搜索替代 
您的意思是: 

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

已解决!
转到解答

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

0 项奖励
1 条消息(共 7 条)
1,273 次查看

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

 

George Zou
0 项奖励
2 条消息(共 7 条)
1,238 次查看

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

0 项奖励
3 条消息(共 7 条)
1,227 次查看

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

0 项奖励
4 条消息(共 7 条)
1,221 次查看

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

0 项奖励
5 条消息(共 7 条)
1,212 次查看

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

0 项奖励
6 条消息(共 7 条)
1,177 次查看
解答
已被主题作者 siriusJ 接受

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

0 项奖励
7 条消息(共 7 条)
1,163 次查看