C++ 有没有办法将std::iostream对象与boost::asio一起使用?
我有一个C++ 有没有办法将std::iostream对象与boost::asio一起使用?,c++,boost,boost-asio,C++,Boost,Boost Asio,我有一个std::iostream对象(例如fstream),我想将它用于boost::asio的异步操作。可能吗?我知道asio不支持文件操作,但有时异步处理文件IO很有用。我可以使用特定于平台的本地文件描述符,然后使用ASIO使用它们,但是我认为使用标准的C++流将在C++中更加优雅,并且也更便携。 Boost。Asio不支持文件操作,它确实提供了应用程序以异步方式执行文件操作的工具集。实现这一点的常用方法是使用Boost.Asio创建线程池。应用程序会将文件操作发布到线程池中,并立即返回。
std::iostream
对象(例如fstream
),我想将它用于boost::asio
的异步操作。可能吗?我知道asio不支持文件操作,但有时异步处理文件IO很有用。我可以使用特定于平台的本地文件描述符,然后使用ASIO使用它们,但是我认为使用标准的C++流将在C++中更加优雅,并且也更便携。Boost。Asio不支持文件操作,它确实提供了应用程序以异步方式执行文件操作的工具集。实现这一点的常用方法是使用Boost.Asio创建线程池。应用程序会将文件操作发布到线程池中,并立即返回。然后线程池将同步执行该操作,并在完成时调用或发布完成处理程序
有几点需要考虑:- 允许应用程序提示线程池的并发级别。这将允许线程池分配足够的线程以满足应用程序的预期需要
- 将在其中调用完成处理程序的线程。例如,它可以在执行同步操作的同一线程中执行,也可以发布到发布文件操作时提供给池的不同
io_服务中
- 完成处理程序的同步或异步行为。例如,如果完成处理程序是的结果,那么它将被异步调用到工作线程。因此,在调用处理程序之前,完成处理程序的参数必须保持有效。这通常可以通过允许参数按值传递或移动来解决
最后,是一个提供同步和异步文件操作的C库。它可能可以作为一个有价值的底层实现或参考资料。我认为标准库流对于您的需要来说太抽象了,因为快速异步IO机制往往是非常低级别的平台特定的。我有理由肯定你在这件事上运气不好。如果boost不提供某种类型的异步流,您将不得不为此寻找另一个第三方库。
boost::asio
不是一个通用异步I/O库,它直接针对支持select
或类似系统调用的长延迟流。对于带有磁盘文件的异步I/O,需要一个完全不同的API。