Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有办法将std::iostream对象与boost::asio一起使用?_C++_Boost_Boost Asio - Fatal编程技术网

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。