我正在尝试通过具有以下特征的标准输入/标准输出找到非阻塞 IO 的最佳解决方案:
- 只要有足够的数据,就读入n 个大小的块。
- 如果没有足够的数据,则读入部分块。
- 如果没有可用数据,则阻塞直到有一些数据(即使它可能小于n)。
目标是在立即处理“控制”代码的同时允许有效传输大型数据集(而不是让它们停留在某个部分填充的缓冲区中)。
我知道我可以通过使用线程和 istream::get() 循环来实现这一点,或者通过编写一堆特定于平台的代码(因为你不能 select() 在 Windows 中的文件句柄上)......((那里也是 istream::readsome() ,这似乎很有希望,但我在谷歌上能找到的唯一结果是人们说它实际上效果不佳。))
由于我没有对这些 API 进行太多编码,也许有更好的方法。