首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在匿名线程中声明异常?

在匿名线程中声明异常,可以通过以下方法实现:

  1. 使用std::promisestd::future
代码语言:cpp
复制
#include<iostream>
#include<thread>
#include <future>
#include<exception>

void someFunction() {
    // 抛出异常
    throw std::runtime_error("An error occurred");
}

int main() {
    std::promise<void> p;
    std::future<void> f = p.get_future();

    std::thread t([&]() {
        try {
            someFunction();
            p.set_value();
        } catch (...) {
            p.set_exception(std::current_exception());
        }
    });

    try {
        f.get();
    } catch (const std::exception& e) {
        std::cerr << "Caught exception: " << e.what()<< std::endl;
    }

    t.join();
    return 0;
}
  1. 使用std::packaged_task
代码语言:cpp
复制
#include<iostream>
#include<thread>
#include <future>
#include<exception>

void someFunction() {
    // 抛出异常
    throw std::runtime_error("An error occurred");
}

int main() {
    std::packaged_task<void()> task(someFunction);
    std::future<void> f = task.get_future();

    std::thread t(std::move(task));

    try {
        f.get();
    } catch (const std::exception& e) {
        std::cerr << "Caught exception: " << e.what()<< std::endl;
    }

    t.join();
    return 0;
}

这两种方法都可以在匿名线程中捕获异常并在主线程中处理。std::promisestd::future方法更适用于需要在线程中执行多个任务的情况,而std::packaged_task方法更适用于只需要在线程中执行一个任务的情况。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券