Есть ли способ использовать объекты std :: iostream с boost :: asio?

у меня есть std::iostream объект (например fstream), и я хочу использовать его для асинхронных операций с boost::asio, Это возможно? Я знаю, что asio не поддерживает файловые операции, но иногда полезно обрабатывать файловый ввод-вывод асинхронно. Я могу использовать специфичные для платформы собственные файловые дескрипторы, а затем использовать их с asio, но я думаю, что использование стандартных потоков C ++ было бы более элегантным в C ++, а также более переносимым.

1

Решение

Хотя Boost.Asio не поддерживает файловые операции, он предоставляет набор инструментов для приложения для выполнения файловых операций в асинхронном режиме. Распространенный подход для достижения этой цели — создать пул потоков с Boost.Asio. Приложение отправит файловую операцию в пул потоков, мгновенно возвращаясь. Затем пул потоков будет выполнять операцию синхронно, а затем будет вызывать или публиковать обработчик завершения.

Есть несколько моментов для рассмотрения:

  • Разрешить приложению указывать на уровень параллелизма пула потоков. Это позволит пулу потоков выделить достаточно потоков, чтобы соответствовать ожидаемой потребности приложения.
  • Поток, в котором будет вызван обработчик завершения. Например, его можно выполнить в том же потоке, в котором была выполнена синхронная операция, или разместить в другом io_service который предоставляется пулу, когда была опубликована файловая операция.
  • Синхронное или асинхронное поведение обработчика завершения. Например, если обработчик завершения является результатом нитка :: обертка, тогда он будет вызываться асинхронно с рабочим потоком. Таким образом, аргументы обработчика завершения должны оставаться действительными до тех пор, пока не будет вызван обработчик. Это часто может быть решено путем передачи аргументов по значению или их перемещения.

В заключение, libuv это библиотеки C, которые обеспечивают синхронные и асинхронные файловые операции. Он может служить достойной основой для реализации или справочного материала.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector