我正在编写一个应用程序需要使用大型音频多样本,通常大小约为50 MB。一个文件包含大约80个单独的短片录音,可以随时由我的应用程序播放。出于这个原因,所有的音频数据都被加载到内存中以便快速访问。如何在C++中执行跨平台异步文件I/O
但是,当加载其中一个文件时,可能需要很多秒才能放入内存,因为我需要使用ifstream读取大量数据,这意味着我的程序GUI暂时被冻结。我试过内存映射我的文件,但这会导致巨大的CPU峰值和每次我需要跳转到文件的不同区域,这是不可接受的音频混乱。
因此,这让我认为执行异步文件读取将解决我的问题,即数据在不同的进程中读取并在完成时调用函数。这需要兼容Mac OS X和Windows以及C++。
编辑:不想使用Boost库,因为我想保留一个小的代码库。
re:Boost.asio,它也作为独立版本存在,请参阅http://think-async.com/ – Hasturkun 2010-03-10 14:55:35
您还可以以较小的块读取数据,这些块不会花费太多时间,然后让事件循环在两者之间运行。 – kashiraja 2011-05-18 17:22:58