C++ 多线程中捕捉异常

有一个主线程,有一个子线程。主线程中调用子线程,并检查是否抛出异常,如果异常就处理异常信息。

主要思路:定义一个全局的std::exception_ptr对象,子线程抛异常时赋给该指针,主线程中检查该对象,然后处理对应的异常

cpp 复制代码
//定义一个全局的异常指针,子线程中赋值,主线程中处理该异常
std::exception_ptr m_exp;
void worker(const std::string& msg)
{
	std::cout << msg << std::endl;
	//do some other work
	for (int i = 0; i < 100; i++)
	{
		if (i == 22)
		{
			//子线程中抛出异常
			throw std::exception("raise an exception in worker thread");
		}
	}

}


int main()
{
	std::thread t1(worker, "恭喜发财");
	t1.join();

	if (m_exp)
	{
		try
		{
			std::rethrow_exception(m_exp);
		}
		catch (const std::exception& ex)
		{
			std::cout << ex.what() << std::endl;
		}
	}
}
相关推荐
froginwe11几秒前
Go 语言结构体
开发语言
松涛和鸣11 分钟前
DAY20 Optimizing VS Code for C/C++ Development on Ubuntu
linux·c语言·开发语言·c++·嵌入式硬件·ubuntu
田里的水稻14 分钟前
Python_编程中代码注释相关格式 PEP8 — Python 官方代码风格指南
开发语言·python
一只乔哇噻16 分钟前
java后端工程师+AI大模型进修ing(研一版‖day57)
java·开发语言·人工智能·算法·语言模型
Williams1023 分钟前
Java POI/Excel工具:终结OOM、精度丢失和i18n三大难题
java·开发语言·excel
李绍熹38 分钟前
Lua 错误处理详解
开发语言·junit·lua
I***261538 分钟前
PHP进阶-在Ubuntu上搭建LAMP环境教程
开发语言·ubuntu·php
灯厂码农40 分钟前
C++文件操作
开发语言·c++
️停云️1 小时前
C++异常与智能指针
开发语言·c++
m0_488913011 小时前
Deep Research技术全解析:从Reasoning到Research with Reasoning的AI进化之路(值得收藏)
开发语言·人工智能·机器学习·大模型·ai大模型·大模型学习