멀티 스레드 C++에서 예외 처리는 std::promise 및 std::future 메커니즘을 통해 구현됩니다. Promise 개체를 사용하여 예외를 발생시키는 스레드에 예외를 기록합니다. 예외를 수신하는 스레드에서 예외를 확인하려면 future 객체를 사용하세요. 실제 예제에서는 Promise와 Future를 사용하여 다양한 스레드에서 예외를 포착하고 처리하는 방법을 보여줍니다.
멀티 스레드 프로그래밍에서는 모든 스레드에서 예외가 발생할 수 있습니다. 스레드 전체에서 예외를 처리하려면 예외가 발생하는 방법과 위치에 대한 명시적인 제어가 없기 때문에 추가 고려 사항이 필요합니다.
C++ 표준 라이브러리는 std::promise
및 std::future
라는 예외 전달 메커니즘을 제공합니다. 이를 사용하여 스레드 간에 예외를 안전하게 전달할 수 있습니다. std::promise
和 std::future
。我们可以使用它们来安全地在线程之间传递异常。
std::promise
负责生成异常,而 std::future
负责接收异常。两个对象必须在同一个线程中创建:
// 在主线程创建 std::promise<void> promise; std::future<void> future = promise.get_future();
当异常在其他线程中抛出时,我们可以使用 promise
对象将其传递:
// 在 worker 线程 try { // ... 代码可能会抛出异常 } catch (const std::exception& e) { promise.set_exception(std::make_exception_ptr(e)); }
然后,可以在主线程中使用 future
对象来检查异常:
// 在主线程 try { future.get(); } catch (const std::exception& e) { // 处理异常 }
以下代码展示了如何使用 std::promise
和 std::future
来处理跨线程异常:
#include <iostream> #include <future> #include <thread> // 打印函数以展示在不同线程中抛出的异常 void printFunction() { try { throw std::runtime_error("这是一个运行时错误!"); } catch (const std::exception& e) { std::cerr << "Worker 线程捕获异常:" << e.what() << '\n'; } } int main() { std::promise<void> promise; std::future<void> future = promise.get_future(); // 在新线程中运行打印函数 std::thread worker(printFunction); // 让主线程等待 worker 线程 try { future.get(); } catch (const std::exception& e) { std::cerr << "主线程捕获异常:" << e.what() << '\n'; } worker.join(); return 0; }
通过使用 std::promise
和 std::future
std::promise
는 예외 생성을 담당하고, std::future
는 예외 수신을 담당합니다. 두 개체는 모두 동일한 스레드에서 생성되어야 합니다. 🎜rrreee🎜 다른 스레드에서 예외가 발생하면 promise
개체를 사용하여 이를 전달할 수 있습니다. 🎜rrreee🎜 그런 다음 메인 스레드 future
객체를 사용하여 예외 확인: 🎜rrreee🎜실용 사례🎜🎜다음 코드는 std::promise
및 std::future를 사용하는 방법을 보여줍니다.
크로스 스레드 예외를 처리하려면: 🎜rrreee🎜Conclusion🎜🎜 std::promise
및 std::future
를 사용하면 크로스 스레드를 안전하게 처리할 수 있습니다. 예외. 이를 통해 예외가 발생한 후에도 실행을 계속하고 나중에 처리할 수 있습니다. 🎜위 내용은 크로스 스레드 C++ 예외를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!