gpt4 book ai didi

c++ - 使用 vector 实现串行缓冲区的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-28 06:07:53 27 4
gpt4 key购买 nike

我需要从串行设备读取数据并将其放入缓冲区以供另一个线程使用。基本上,我想实现这个:

while(!exit){
// read from fd and push into the vector<char> buffer
}

并在 C++ 中以正确的方式进行。我知道如何用 C 语言完成这项工作,如果有人能指出正确的方向,我将不胜感激。

根据我目前的发现,人们一直在建议:

read(fd, &vector[0], vector.size());

但是,我不相信。特别是因为直接修改 &vector[0] 不会更新 size()(或者是吗?)并且似乎是修改底层数组的间接方式。如果可以的话,我也想避免使用 open()read(),因为它们不是真正的 C++。某种形式的 istream 在这里会很棒!

此外,我找不到任何示例来说明当需要从其他线程使用数据时如何从该 vector 中巧妙地“弹出”数据。我相信,而且我当然不是 100% 确定这一点,如果这个 vector 只有一个编写器线程和一个读取器线程,我就不需要任何特殊的线程安全代码。如果我错了,请纠正我。

如果重要的话, vector 中的数据是二进制的。

最佳答案

根据我的经验,我一直使用固定大小的 uint8_t 数组进行串行通信。这提供了比通过 vector 更快的访问;大多数串行 I/O 都是时间敏感的。

固定大小意味着无需花时间调整大小。

关于c++ - 使用 vector<char> 实现串行缓冲区的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31996398/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com