Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理C++中的完整CircularBuffer 这是一个一般问题,我是C++新手,我正在玩一个项目,它从一个工作线程中的串行/USB端口读取1毫秒间隔的数据到一个循环缓冲区,并且我还有一个GUI UI线程,每100毫秒就可以获取数据。当数据备份且数据缓冲区满时会发生什么情况,我不想被阻塞,我需要抓取数据,因为它不需要等待。在这种情况下,常见的做法是什么?我是为额外的创建另一个缓冲区,还是将原始缓冲区变大_C++_Serial Port_Buffer - Fatal编程技术网

如何处理C++中的完整CircularBuffer 这是一个一般问题,我是C++新手,我正在玩一个项目,它从一个工作线程中的串行/USB端口读取1毫秒间隔的数据到一个循环缓冲区,并且我还有一个GUI UI线程,每100毫秒就可以获取数据。当数据备份且数据缓冲区满时会发生什么情况,我不想被阻塞,我需要抓取数据,因为它不需要等待。在这种情况下,常见的做法是什么?我是为额外的创建另一个缓冲区,还是将原始缓冲区变大

如何处理C++中的完整CircularBuffer 这是一个一般问题,我是C++新手,我正在玩一个项目,它从一个工作线程中的串行/USB端口读取1毫秒间隔的数据到一个循环缓冲区,并且我还有一个GUI UI线程,每100毫秒就可以获取数据。当数据备份且数据缓冲区满时会发生什么情况,我不想被阻塞,我需要抓取数据,因为它不需要等待。在这种情况下,常见的做法是什么?我是为额外的创建另一个缓冲区,还是将原始缓冲区变大,c++,serial-port,buffer,C++,Serial Port,Buffer,谢谢您可以使用一个循环缓冲区,在它满时分配更多内存 如果您对创建自己的循环缓冲区不感兴趣,您可以使用它,或者只是将其作为参考来检查。您可以使用循环缓冲区,在其满时分配更多内存 如果您对创建自己的循环缓冲区不感兴趣,您可以使用它,或者只是将其作为参考。我会将其放在注释中,但因为我不能:您不能调整缓冲区大小有什么原因吗 如果没有,我看不出有什么理由不使用缓冲区来为您提供一些安全空间,毕竟这就是缓冲区的用途。我会将此放在评论中,但因为我不能:有什么理由不能调整缓冲区大小吗 如果不是的话,我看不出有什么

谢谢

您可以使用一个循环缓冲区,在它满时分配更多内存


如果您对创建自己的循环缓冲区不感兴趣,您可以使用它,或者只是将其作为参考来检查。

您可以使用循环缓冲区,在其满时分配更多内存


如果您对创建自己的循环缓冲区不感兴趣,您可以使用它,或者只是将其作为参考。我会将其放在注释中,但因为我不能:您不能调整缓冲区大小有什么原因吗


如果没有,我看不出有什么理由不使用缓冲区来为您提供一些安全空间,毕竟这就是缓冲区的用途。

我会将此放在评论中,但因为我不能:有什么理由不能调整缓冲区大小吗


如果不是的话,我看不出有什么理由你不应该用你的缓冲器来给你一些安全的空间,毕竟这就是缓冲器的用途。

坦率地说,你是完蛋了

现在,让我们看看情况有多糟,有多种方法可以处理缓冲区溢出:

可以选择以静默方式删除一些数据。您必须决定从开始还是结束删除数据效果更好。 合并一些数据以释放缓冲区中的空间。 手头有一个紧急缓冲器,以防溢出。 中止操作,事情必须完全重做。 忽略错误,假装它永远不会发生。结果可能很有趣,也很出乎意料。 重新设计以加快移交/处理速度。 使用更大的缓冲区重新设计,以实现峰值吞吐量。
不管怎么说,如果你想了解更多关于它的信息,请研究实时和软实时编程。

坦率地说,你已经完蛋了

现在,让我们看看情况有多糟,有多种方法可以处理缓冲区溢出:

可以选择以静默方式删除一些数据。您必须决定从开始还是结束删除数据效果更好。 合并一些数据以释放缓冲区中的空间。 手头有一个紧急缓冲器,以防溢出。 中止操作,事情必须完全重做。 忽略错误,假装它永远不会发生。结果可能很有趣,也很出乎意料。 重新设计以加快移交/处理速度。 使用更大的缓冲区重新设计,以实现峰值吞吐量。
无论如何,如果您想了解更多,请研究实时和软实时编程。

这取决于您使用的循环缓冲区的实现。如果插入已满,您可以阻止插入,或者您可以删除第一个元素,然后删除第二个元素,等等。将数据处理与GUI线程分离。我认为这在某些方面是特定于数据的。您能承受删除数据后仍继续吗?我认为底线是你要么阻止,要么报告错误情况。然后是更高级别的代码如何处理。对我来说,拥有第二个缓冲区听起来像是拥有更大缓冲区的一种复杂方式。这取决于您使用循环缓冲区的哪个实现。如果插入已满,您可以阻止插入,或者您可以删除第一个元素,然后删除第二个元素,等等。将数据处理与GUI线程分离。我认为这在某些方面是特定于数据的。您能承受删除数据后仍继续吗?我认为底线是你要么阻止,要么报告错误情况。然后是更高级别的代码如何处理。对我来说,拥有第二个缓冲区听起来像是拥有更大缓冲区的复杂方式。谢谢你的提示。1是绝对不,我一点数据都不能掉!正如我在作品中提到的,3是我头上第一件想不起来的事情。你能详细说明6吗?@sam2015关于6恐怕说不多。具体实施。基本上,将数据从缓冲区中取出并更快地交到消费者手中,让消费者更快地处理数据,以便消费者能够从缓冲区中获取更多数据。两者几乎完全取决于程序如何移动和使用数据。唯一可以给出的建议是一般性能调整。谢谢你的提示。1是绝对不,我一点数据都不能掉!正如我在作品中提到的,3是我头上第一件想不起来的事情。你能详细说明6吗?@sam2015关于6恐怕说不多。具体实施。基本上,将数据从缓冲区中取出并更快地交到消费者手中,让消费者更快地处理数据,以便消费者能够从缓冲区中获取更多数据。两者几乎完全取决于程序的移动和使用方式 s数据。唯一可以给出的建议是一般性能调整。