[c++] asynchronous 예외 처리
C++에서는 asynchronous 예외 처리를 위해 std::future
와 std::promise
를 사용할 수 있습니다. 이러한 기능은 특히 비동기 작업을 수행하고 그 결과를 처리해야 할 때 유용합니다.
std::future
및 std::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::future
와 std::promise
가 유용하게 활용될 수 있습니다. 이러한 도구를 효과적으로 활용하여 비동기 작업에서 발생한 예외를 적절히 처리할 수 있습니다.