2016-07-25 3 views
-2

Привет, я не знаю никаких знаний о многопоточном или параллельном программировании.Загрузите большой файл асинхронно с помощью C++

Мне нужно загрузить несколько файлов для приложения, в которых время загрузки не влияет на приложение или ответ пользователю.

Я использовал CreateThread с тем, что я не могу загрузить данные в переменную класса.

Любое руководство, как это сделать в VC++, будет отличной помощью.

Спасибо заранее!

Например, Мое приложение представляет собой потоковое содержимое, тем временем мне нужно загрузить большое изображение в переменную класса (Bitmap), которая не должна влиять на потоковое воспроизведение без паузы.

+1

этот вопрос не заслуживает downvotes. это действительно хороший вопрос, который показывает общую путаницу в отношении термина «асинхронный». асинхронный не подразумевает всегда «в другом потоке». особенно в IO, асинхронный IO НЕ использует потоки, чтобы сделать IO асинхронным. Я предлагаю прочитать о перекрывающихся портах ввода-вывода, ввода-вывода и посмотреть примеры из CPPRest и Boost.ASIO –

+0

@DavidHaim Спасибо за предложения :) –

ответ

1

Современный C++ позволяет использовать высокоуровневые абстрактные функции, такие как станд :: будущее:

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 
    } 
Смежные вопросы