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;
		}
	}
}
相关推荐
csbysj2020几秒前
CSS !important:深度解析与最佳实践
开发语言
初心未改HD5 分钟前
Go语言测试与Benchmark:测试驱动开发的实践指南
开发语言·golang
chxii12 分钟前
lua流程控制语句和table(表)数据结构
开发语言·junit·lua
逻辑驱动的ken20 分钟前
Java高频面试考点场景题20
java·开发语言·深度学习·面试·职场和发展
W.A委员会21 分钟前
多行溢出在末尾添加省略号
开发语言·javascript·css
wjs202423 分钟前
RSS Item 元素:深入解析与使用指南
开发语言
小郑加油26 分钟前
python学习Day11:认识与创建CSV文件
开发语言·python·学习
念何架构之路1 小时前
Go Web基础和Http演进
开发语言·后端·golang
初心未改HD1 小时前
Go语言database/sql与SQLx:构建健壮的数据访问层
开发语言·golang
晚风吹红霞1 小时前
C++异常处理核心知识点全解析
开发语言·c++