您好我对多线程或并行编程有任何了解。
我需要为应用程序加载多个文件,其中加载时间不会影响应用程序或对用户的响应。
我使用了CreateThread,因为我无法将数据加载到类变量中。
任何有关如何在VC ++中执行此操作的指导都将是一个很好的帮助。
先谢谢!!
例如, 我的应用程序是流式传输内容,同时我需要将一个大图像加载到类变量(Bitmap),这不应该影响流式传输,即不会暂停。
答案 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
}