Я пишу приложение, которое должно использовать большие звуковые мультисэмплы, обычно размером около 50 мб. Один файл содержит около 80 отдельных коротких звуковых записей, которые могут быть воспроизведены в моем приложении в любое время. По этой причине все аудиоданные загружаются в память для быстрого доступа.Как выполнить кросс-платформенный асинхронный ввод-вывод файлов в C++
Однако при загрузке одного из этих файлов в память может потребоваться много секунд, потому что мне нужно прочитать большой объем данных с помощью ifstream, то есть мой программный графический интерфейс временно заморожен. Я попытался сопоставить память с моим файлом, но это вызывает огромные всплески процессора и беспорядок звука каждый раз, когда мне нужно перейти в другую область файла, что неприемлемо.
Так что это заставило меня думать, что выполнение чтения асинхронного файла решит мою проблему, то есть данные будут прочитаны в другом процессе и вызовет функцию при завершении. Это должно быть совместимо для Mac OS X и Windows и на C++.
EDIT: Не хотите использовать библиотеку Boost, потому что я хочу сохранить небольшую базу кода.
re: Boost.asio, он также существует как отдельная версия, см. Http://think-async.com/ – Hasturkun
Вы также можете читать свои данные в небольших кусках, которые не занимают столько времени, а затем позволяют цикл событий выполняется между ними. – kashiraja