Ich schreibe eine Anwendung muss große Audio-Multi-Samples, in der Regel etwa 50 MB Größe verwenden. Eine Datei enthält ca. 80 einzelne kurze Tonaufnahmen, die jederzeit von meiner Anwendung wiedergegeben werden können. Aus diesem Grund werden alle Audiodaten für einen schnellen Zugriff in den Speicher geladen.So führen Sie plattformübergreifende asynchrone Datei-E/A in C++ aus
Wenn Sie eine dieser Dateien laden, kann es jedoch einige Sekunden dauern, sie in den Speicher zu legen, da ich eine große Datenmenge mit ifstream lesen muss, was bedeutet, dass meine Programm-GUI vorübergehend eingefroren ist. Ich habe versucht, meine Datei zu speichern, aber das verursacht riesige CPU-Spitzen und ein Chaos von Audio jedes Mal, wenn ich zu einem anderen Bereich der Datei springen muss, was nicht akzeptabel ist.
Das hat mich dazu gebracht zu denken, dass die Durchführung einer asynchronen Datei lesen mein Problem lösen wird, das heißt, die Daten werden in einem anderen Prozess gelesen und ruft eine Funktion bei Abschluss. Dies muss sowohl für Mac OS X und Windows als auch für C++ kompatibel sein.
EDIT: Ich möchte nicht die Boost-Bibliothek verwenden, weil ich eine kleine Codebasis behalten möchte.
Re: Boost.asio, es existiert auch als eigenständige Version, siehe http://think-async.com/ – Hasturkun
Sie können Ihre Daten auch in kleineren Chunks lesen, die nicht so viel Zeit kosten würden, dann lassen Sie die Event-Schleife dazwischen laufen. – kashiraja