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;
		}
	}
}
相关推荐
woshimyc几秒前
ESP32连接ThingsCloud上传设备数据(智慧小灯)
c++·物联网
散峰而望1 分钟前
C语言刷题-编程(一)(基础)
c语言·开发语言·编辑器
Dxxyyyy4 分钟前
零基础学JAVA--Day27(注释+异常+异常处理方法)
java·开发语言
视图猿人39 分钟前
RxJS基本使用及在next.js中使用的例子
开发语言·javascript
Maple_land40 分钟前
Linux复习:系统调用与fork
linux·运维·服务器·c++·centos
墨雪不会编程43 分钟前
C++的基础语法篇一 ——命名空间
开发语言·c++
火山上的企鹅1 小时前
Qt C++ 软件开发工程师面试题
c++·qt·面试
墨客希1 小时前
安装 awscli
开发语言
天天进步20151 小时前
Python全栈项目:结合Puppeteer和AI模型操作浏览器
开发语言·人工智能·python
唐僧洗头爱飘柔95271 小时前
【GORM(3)】Go的跨时代ORM框架!—— 数据库连接、配置参数;本文从0开始教会如何配置GORM的数据库
开发语言·数据库·后端·golang·gorm·orm框架·dsn