gpt4 book ai didi

c++ - 拥有带回调或事件的 std::istream 以避免拉取或阻塞读取

转载 作者:行者123 更新时间:2023-11-30 05:43:25 26 4
gpt4 key购买 nike

我想使用自己的 std::istream 实现来封装一个 tcp/ip 套接字。我现在面临的主要问题是,在事件驱动系统中我不想阻止读取操作。我寻找的是注册回调/事件的标准方法,以告诉消费单元有字节要读取。我没有在 std::iostream 区域找到任何东西。是否有一个符合的解决方案,或者我仍然需要引入我自己的函数绑定(bind)接口(interface)?

最佳答案

std::iostream 是阻塞的,不包含检测可用字节数的标准方法。你必须介绍你的界面。

std::istream::readsome 并将执行非阻塞读取从其内部缓冲区,但不会检查套接字以查看是否需要重新填充缓冲区。有时它可以为您工作,但在其他时候他们会简单地坚持没有更多数据,即使数据已发送到程序也是如此。有关详细信息,请参阅此问题:C++ std::istream readsome doesn't read anything

ProgrammerJake指出basic_streambuf::showmanyc是您正在寻找的接口(interface),但仅在某些 C++ 实现中有用地实现。但是,由于您无论如何都在制作一个替换缓冲区,因此您可以简单地重载/实现此函数,但您希望在您的缓冲区类中使用它!

关于c++ - 拥有带回调或事件的 std::istream 以避免拉取或阻塞读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30221660/

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