2016-07-25 11 views
-2

Hallo ich habe keine Kenntnisse über Multithreading oder Parallele Programmierung.Große Datei asynchron laden mit C++

Ich muss mehrere Dateien für eine Anwendung laden, in denen die Ladezeit nicht die Anwendung oder die Antwort an den Benutzer betrifft.

Ich verwendete CreateThread mit dem ich nicht in der Lage, Daten in eine Klassenvariable zu laden.

Jede Anleitung, wie dies in VC++ zu tun ist, wird eine große Hilfe sein.

Vielen Dank im Voraus!

Zum Beispiel, Meine Anwendung Streaming-Inhalte zwischenzeitlich muss ich ein großes Bild zu Klassenvariable (Bitmap) laden, die das Streaming nicht beeinträchtigen sollte, d. H. Ohne Pause.

+1

diese Frage downvotes nicht verdient. Es ist eigentlich eine nette Frage, die die allgemeine Verwirrung bezüglich des Begriffs "asynchron" zeigt. asynchron bedeutet nicht immer "auf einem anderen Thread". Insbesondere bei IO verwendet die asynchrone IO KEINE Threads, um das IO asynchron zu machen. Ich empfehle, über Overlapped IO, IO Completion Ports zu lesen und Beispiele von CPPRest und Boost.ASIO zu sehen –

+0

@DavidHaim Danke für die Vorschläge :) –

Antwort

1

Moderne C++ ermöglicht es Ihnen, hallo Ebene abstrakten Funktionen wie std :: Zukunft zu verwenden:

struct Data { 
    // file name just for info 
    std::string file_name; 
    // here is data from file ... 

    static Data load(const std::string& name) { 
     Data data{ name }; 
     // todo load from file 
     return std::move(data); 
    } 
    }; 
    std::vector<std::string> names = { "file1.txt", "file2.txt", "file3.txt" }; 
    std::vector<std::future<Data>> results; 
    for (const auto& name : names) { 
    // load from the name file asynchronously 
    auto future = std::async(std::launch::async, &Data::load, std::ref(name)); 
    results.emplace_back(future); 
    } 
    // gather result 
    for (auto& future : results) { 
    Data& data = future.get(); 
    // todo use data from the file object 
    }