要将 try
块中的代码以异步方式执行,你可以使用 std::async
函数来创建一个异步任务。在此之前,请确保包含了 <future>
头文件。
#include <future>
// ...
try
{
auto asyncTask = std::async(std::launch::async, [&]() {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(0, 255);
for (int i = 0; i < 200; ++i)
{
for (int j = 0; j < MB; ++j)
{
buffer[j] = static_cast<char>(dis(gen));
}
writeFile.write(buffer, MB);
}
phosphor::logging::log<phosphor::logging::level::INFO>(
"Writing data to emmc test file complete!");
writeHash = calculateFileHash(fileName);
std::cout << "writeHash : " << writeHash << std::endl;
});
// 在此处可以继续执行其他操作
// 等待异步任务完成
asyncTask.wait();
// 异常处理
if (asyncTask.valid())
{
try
{
asyncTask.get();
}
catch (const std::exception& e)
{
// 异常处理逻辑
std::cerr << e.what() << '\n';
}
}
delete[] buffer;
}
catch(const std::exception& e)
{
std::cerr << e.what() << '\n';
}
// ...
这样,std::async
将会将 try
块中的代码作为一个异步任务,在后台独立执行,而主线程可以继续执行其他操作。在需要等待异步任务完成时,使用 asyncTask.wait()
来等待,并通过 asyncTask.get()
获取可能抛出的异常。
内容由零声教学AI助手提供,问题来源于学员提问