Sto scrivendo un'applicazione che richiede l'uso di campioni audio di grandi dimensioni, in genere di circa 50 MB di dimensione. Un file contiene circa 80 singole registrazioni audio brevi, che possono essere riprodotte dalla mia applicazione in qualsiasi momento. Per questo motivo tutti i dati audio vengono caricati in memoria per un rapido accesso.Come eseguire l'I/O su file asincrono multipiattaforma in C++
Tuttavia, quando si carica uno di questi file, possono essere necessari molti secondi per la memoria perché ho bisogno di leggere una grande quantità di dati con ifstream, ovvero la mia GUI del programma è temporaneamente bloccata. Ho provato a mappare la memoria del mio file, ma questo causa enormi picchi di CPU e un pasticcio di audio ogni volta che ho bisogno di passare a un'area diversa del file, il che non è accettabile.
Quindi questo mi ha portato a pensare che l'esecuzione di un file asincrono leggendo risolverà il mio problema, cioè i dati vengono letti in un processo diverso e richiamano una funzione al completamento. Questo deve essere compatibile sia per Mac OS X che per Windows e in C++.
MODIFICA: Non voglio usare la libreria Boost perché voglio mantenere una piccola base di codice.
re: Boost.asio, esiste anche come versione standalone, vedere http://think-async.com/ – Hasturkun
Puoi anche leggere i tuoi dati in blocchi più piccoli che non richiederebbero tanto tempo, quindi lasciare che il ciclo di eventi in esecuzione tra. – kashiraja