gpt4 book ai didi

c++ - 如何阻止读取 C++ stringstream 以等待数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:25 25 4
gpt4 key购买 nike

所以,我一直在努力弄清楚,如何等待来自 C++ stringstream 的数据(例如),而不是不断地检查数据是否存在,这非常消耗 CPU。

例如,我完全能够从串行设备读取数据,并在没有数据到达时锁定进程,但不幸的是,我还不知道如何使用 C++ 流来做到这一点。

我确定我遗漏了什么,因为 cin 正是这样做的,即等待返回键从 istream 读取中退出,但它是如何做到的?

在此先感谢您对这个主题的任何了解。

最佳答案

Streams 从 std::streambuf 获取数据。对于 std::cin,它调用系统的 read() 函数(或等效函数),该函数会阻塞,直到数据从操作系统移交。控制台通常会发送完整的行。字符串流没有获取新数据的概念,即,当到达当前数据的末尾时它们会失败。没有阻塞的概念。

您没有说清楚您在做什么,但从它的声音来看,它尝试在两个线程之间传递数据:一个读取并可能阻塞直到数据可用,另一个填充更多数据。您可以很容易地创建相应的流缓冲区:如果没有数据,std::streambuf::underflow() 将在条件变量上wait()std::streambuf::overflow() 将适本地设置缓冲区并向条件变量发出信号。显然,有一些必要的同步需求。不过,大多数读写操作都没有进行任何同步。这实际上意味着您将需要两个单独的输入和输出缓冲区,并且需要在 std::streambuf::underflow() 中复制数据。

关于c++ - 如何阻止读取 C++ stringstream 以等待数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12351163/

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