因此,我一直试图弄清楚如何等待来自 C++ stringstream 的数据(例如),而不需要不断检查数据是否存在,这非常消耗 CPU。
例如,我完全能够从串行设备读取数据,并在没有数据到达时锁定进程,但不幸的是我无法弄清楚如何使用 C++ 流来做到这一点。
我确信我错过了一些东西,因为 cin 正是这样做的,即等待返回键从 istream 读取中退出,但它是如何做到的呢?
预先感谢您对这个主题的任何了解。
流从以下位置获取数据std::streambuf
。对于以下情况std::cin
它调用系统的read()
函数(或等效函数)会阻塞,直到数据从操作系统移交为止。控制台通常发送完整的行。字符串流没有获取新数据的概念,即,当到达当前数据的末尾时,它们会失败。没有阻塞的概念。
您没有完全说出您在做什么,但从它的声音来看,尝试在两个线程之间通信数据:一个读取并可能阻塞直到数据可用,另一个填充更多数据。您可以非常轻松地创建相应的流缓冲区:std::streambuf::underflow()
would wait()
如果没有数据,则在条件变量上。std::streambuf::overflow()
将适当地设置缓冲区并发出条件变量信号。显然,需要进行一些同步。不过,大多数读取和写入都没有进行任何同步。这实际上意味着您将需要两个单独的缓冲区用于输入和输出,并且需要将数据复制到std::streambuf::underflow()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)