热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

std::iostream是否是非阻塞的?

如何解决《std::iostream是否是非阻塞的?》经验,为你挑选了1个好方法。

根据Boost.Iostreams的提升参考(在第3.6节,在最底部):

http://www.boost.org/doc/libs/1_64_0/libs/iostreams/doc/index.html

虽然Boost.Iostreams过滤器和设备概念可以适应非阻塞i/o,但C++标准库流和流缓冲接口不能,因为它们缺乏区分临时和永久失败以满足读或写请求的方法

但是,该函数std::istream::readsome似乎是非阻塞的,因为可以立即返回可用字符,而不会阻塞(RAM副本除外)等待.我的理解是:

std::istream::read将阻止直到eof或读取的字符数.

std::istream::readsome 将立即返回从内部缓冲区复制的字符.



1> Nemo..:

我同意你的意见,这readsome不是阻止操作.然而,如所指定的,作为用于执行通常称为"非阻塞I/O"的接口,它完全不合适.

首先,有没有保证,readsome以往任何时候都返回新的数据,即使它是可用的.因此,为了确保您实际取得进展,您必须最终使用其中一个阻止接口.

其次,没有办法知道什么时候readsome会返回数据.无法"轮询"流,或获取"通知"或"事件"或"回调".可用的非阻塞接口至少需要其中一个.

简而言之,readsome似乎是一种半成品且未充分指定的尝试,为I/O流提供非阻塞接口.但我从未见过它在生产代码中使用过,我不希望这样.

我认为Boost文档夸大了论证,因为正如您所观察到的那样,readsome当然能够区分暂时性和永久性失败.但由于上述原因,他们的结论仍然是正确的.


推荐阅读
  • 解开一个困扰自己多时的小问题——从std::cout和endl说起
    解开一个困扰自己多时的小问题小序今天上班的时候问了一起工作的Sidney同学一个小问题,显然他是研究过了的,不过他当时没有给出我答案。这个问题着实困扰了我好长时间捏~~晚上吃的小葱蘸 ... [详细]
  • CC++如何复制 ... [详细]
  • 如何解决《使用std::ostream作为打印函数的参数》经验,为你挑选了1个好方法。 ... [详细]
  • [置顶]        C++类的构造函数与析构函数的调用顺序
    1构造函数的调用顺序[1]构造函数按此顺序执行工作:按声明顺序调用基类和成员构造函数。如果类派生自虚拟基类,则会将对象的虚拟基指针初始化。如果类具有或继承了虚函数,则会将对象的虚函数指针初始化。 ... [详细]
  • 如何解决《C++getline传递文件或cin》经验,为你挑选了1个好方法。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 为了加速游戏,一提起汇编语言,大家也许会感到很神秘。其实如果你学起来就会发现,它并非想象中那样难。特别是内嵌汇编,由于它和C++紧密结合,使你不必考虑很多烦琐的细节(例如输入输出函数的写法),学习起来 ... [详细]
  • 第五周项目一——体验常成员函数(1)
    设计平面坐标点类,计算两点之间距离、到原点距离、关于坐标轴和原点的对称点等。在设计中,由于求距离、求对称点等操作对原对象不能造成任何改变,所以,将这些函数设计为常成员函数是合适的,能够避免数据成 ... [详细]
  • 由CStringW(wchar_t)不能正常打印收集的
    WIN7、VS2010(工程字符集为Unicode):源代码如下:CStringWline;rs是ODBC取得的结果集(有汉字),调试发现line能成功读取line.Form ... [详细]
  • ProblemDescriptionAninchwormisatthebottomofawellninchesdeep.Ithasenoughene ... [详细]
  • Here是指向最小代码的链接,如果消失了, ... [详细]
  • 第3章 感受(一)——3.1. Hello world 经典版
    [回到目录]白话C++第3章.感受Helloworld!,HelloC++,我们来了!3.1.Helloworld经典版毫无疑义,一 ... [详细]
  • 名字空间是为了防止名字污染在标准C++中引入的。它可以将其中定义的名字隐藏起来,不同的名字空间中可以有相同的名字而互不干扰,使用时用域操作符(::)来引用。namespace名字{ ... [详细]
  • 【项目4 - 处理C++源代码的程序】(3)
    问题描述:(3)读入一个C++程序,输入m、n两个数字,从第m行起的n行代码将作为注释使用(即在这些行前面加上””),新程序保存到另一个.cpp文件中,并在屏幕上显示处理过的程序, ... [详细]
author-avatar
铭娟佑廷雅冰
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有