1
我有一个std::iostream
对象(例如fstream
),我想用boost::asio
使用异步操作。那可能吗?我知道asio不支持文件操作,但有时非常有用地处理文件IO。我可以使用特定于平台的本地文件描述符,然后将它们与asio一起使用,但我认为使用标准C++流将在C++中更加优雅,并且更加便携。有没有办法使用boost :: asio使用std :: iostream对象?
我有一个std::iostream
对象(例如fstream
),我想用boost::asio
使用异步操作。那可能吗?我知道asio不支持文件操作,但有时非常有用地处理文件IO。我可以使用特定于平台的本地文件描述符,然后将它们与asio一起使用,但我认为使用标准C++流将在C++中更加优雅,并且更加便携。有没有办法使用boost :: asio使用std :: iostream对象?
虽然Boost.Asio的不支持的文件操作,它为以异步方式执行文件操作的应用程序提供的工具集。完成此操作的常用方法是使用Boost.Asio创建一个线程池。应用程序会将文件操作发布到线程池中,并立即返回。然后线程池将同步执行操作,并在完成时调用或发布完成处理程序。
有几点考虑:
io_service
。最后,libuv是一个C库,提供同步和异步文件操作。它可以作为一个有价值的基础实施或参考材料。
由于快速异步IO机制往往是相当低层次的平台特定,我认为标准库流太抽象,不适合您的需求。我相当肯定你在这个特定的例子中运气不好。如果boost没有提供某种异步流,那么您必须为此寻找另一个第三方库。 – Rook
哪个平台? –
'boost :: asio'不是一个通用的异步I/O库,它直接针对的是非平凡的支持select或类似系统调用的长延迟流。对于具有磁盘文件的异步I/O,需要完全不同的API。 –