繁体   English   中英

有没有办法在 boost::asio 中使用 std::iostream 对象?

[英]Is there a way to use std::iostream objects with boost::asio?

我有一个std::iostream对象(例如fstream ),我想将它用于boost::asio异步操作。 那可能吗? 我知道 asio 不支持文件操作,但有时异步处理文件 IO 很有用。 我可以使用特定于平台的本机文件描述符,然后将它们与 asio 一起使用,但我认为在 C++ 中使用标准 C++ 流会更优雅,也更可移植。

虽然 Boost.Asio 不支持文件操作,但它确实为应用程序以异步方式执行文件操作提供了工具集。 实现这一点的常用方法是使用 Boost.Asio 创建一个线程池。 应用程序会将文件操作发布到线程池中,并立即返回。 然后线程池将同步执行操作,并在完成时调用或发布完成处理程序。

有几点需要考虑:

  • 允许应用程序提示线程池的并发级别。 这将允许线程池分配足够的线程以满足应用程序的预期需求。
  • 将在其中调用完成处理程序的线程。 例如,它可以在执行同步操作的同一线程中执行,或者发布到发布文件操作时提供给池的不同io_service中。
  • 完成处理程序的同步或异步行为。 例如,如果完成处理程序是strand::wrap的结果,那么它将与工作线程异步调用。 因此,完成处理程序的参数必须保持有效,直到调用处理程序。 这通常可以通过允许按值传递或移动参数来解决。

最后, libuv是一个提供同步和异步文件操作的 C 库。 它可以作为有价值的底层实现或参考材料。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM