[c++] asynchronous 예외 처리

C++에서는 asynchronous 예외 처리를 위해 std::futurestd::promise를 사용할 수 있습니다. 이러한 기능은 특히 비동기 작업을 수행하고 그 결과를 처리해야 할 때 유용합니다.

std::futurestd::promise 소개

std::future는 비동기 작업의 결과를 나타내는 데 사용됩니다. 작업이 완료되면 결과를 가져올 수 있습니다.

std::promise는 비동기 작업의 결과를 설정하거나 예외를 던질 수 있는 데 사용됩니다. 작업이 완료되거나 예외가 발생하면 결과나 예외를 std::future로 전달할 수 있습니다.

예외 처리

비동기 작업에서 예외가 발생하는 경우, 해당 예외를 적절히 처리해야 합니다. 일반적으로 std::future를 사용하여 비동기 예외를 처리합니다.

아래는 예외를 던지고 잡는 예제 코드입니다.

#include <iostream>
#include <future>

int main() {
    std::promise<int> prom;
    std::future<int> fut = prom.get_future();

    std::thread t([](std::promise<int>& prom) {
        try {
            // 비동기 작업 수행
            // 예외 발생 시
            throw std::runtime_error("Asynchronous exception");
            // 예외 미발생 시
            prom.set_value(42);
        } catch (...) {
            prom.set_exception(std::current_exception());
        }
    }, std::ref(prom));

    try {
        int result = fut.get();
        std::cout << "Result: " << result << std::endl;
    } catch (const std::exception& e) {
        std::cerr << "Caught exception: " << e.what() << std::endl;
    }

    t.join();

    return 0;
}

결론

C++에서 asynchronous 예외를 처리하는 데는 std::futurestd::promise가 유용하게 활용될 수 있습니다. 이러한 도구를 효과적으로 활용하여 비동기 작업에서 발생한 예외를 적절히 처리할 수 있습니다.

참고 자료