使用c ++异步加载大文件

时间:2016-07-25 06:28:58

标签: c++ multithreading

您好我对多线程或并行编程有任何了解。

我需要为应用程序加载多个文件,其中加载时间不会影响应用程序或对用户的响应。

我使用了CreateThread,因为我无法将数据加载到类变量中。

任何有关如何在VC ++中执行此操作的指导都将是一个很好的帮助。

先谢谢!!

例如, 我的应用程序是流式传输内容,同时我需要将一个大图像加载到类变量(Bitmap),这不应该影响流式传输,即不会暂停。

1 个答案:

答案 0 :(得分:1)

Modern C ++允许您使用高级抽象功能,例如std :: future:

  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
  }