у меня есть std::iostream
объект (например fstream
), и я хочу использовать его для асинхронных операций с boost::asio
, Это возможно? Я знаю, что asio не поддерживает файловые операции, но иногда полезно обрабатывать файловый ввод-вывод асинхронно. Я могу использовать специфичные для платформы собственные файловые дескрипторы, а затем использовать их с asio, но я думаю, что использование стандартных потоков C ++ было бы более элегантным в C ++, а также более переносимым.
Хотя Boost.Asio не поддерживает файловые операции, он предоставляет набор инструментов для приложения для выполнения файловых операций в асинхронном режиме. Распространенный подход для достижения этой цели — создать пул потоков с Boost.Asio. Приложение отправит файловую операцию в пул потоков, мгновенно возвращаясь. Затем пул потоков будет выполнять операцию синхронно, а затем будет вызывать или публиковать обработчик завершения.
Есть несколько моментов для рассмотрения:
io_service
который предоставляется пулу, когда была опубликована файловая операция.В заключение, libuv это библиотеки C, которые обеспечивают синхронные и асинхронные файловые операции. Он может служить достойной основой для реализации или справочного материала.
Других решений пока нет …