C++ std::thread 多线程中的异常处理
环境:
VS2019
包含头文件:
#include <iostream>
#include<thread>
#include<exception>
线程函数采用try{...}catch(...){...}机制
如果需要在主线程检测子线程的异常时,采用全局变量的方式获取
std::exception_ptr ptr;
void f0()
{
try {
std::string str;
for (int i = 0; i < 5; i++)
{
std::cout << "f0线程启动" << i << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
str.at(2); //越界访问
throw std::exception("线程中正常抛出异常"); //抛出异常
}
catch (const std::exception& m) {
std::cout <<"子线程输出异常信息:" << m.what() << std::endl;
ptr = std::current_exception();
}
}
int main()
{
std::thread t1(f0);
t1.join(); //主线程等待子线程结束
try {
if (ptr) {
std::cout << "检测到子线程异常" << std::endl;
std::rethrow_exception(ptr);
}
}
catch (std::exception& e)
{
std::cout <<"主线程输出子线程错误信息:" << e.what() << std::endl;
}
std::cout << "主线程退出!" << std::endl;
return 0;
}
C++ std::thread 多线程中的异常处理的更多相关文章
- C#多线程中的异常处理
常规Thread中处理异常 使用Thread创建的子线程,需要在委托中捕捉,无法在上下文线程中捕捉 static void Main(string[] args) { ThreadStart thre ...
- C#多线程中的异常处理(转载)
常规Thread中处理异常 使用Thread创建的子线程,需要在委托中捕捉,无法在上下文线程中捕捉 static void Main(string[] args) { ThreadStart thre ...
- Java多线程中的异常处理
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉.这一点是通过java.lang.Run ...
- std::thread使用
本文将从以下三个部分介绍C++11标准中的thread类,本文主要内容为: 启动新线程 等待线程与分离线程 线程唯一标识符 1.启动线程 线程再std::threada对象创建时启动.最简单的情况下, ...
- 第24课 std::thread线程类及传参问题
一. std::thread类 (一)thread类摘要及分析 class thread { // class for observing and managing threads public: c ...
- C++11多线程std::thread的简单使用
在cocos2dx 2.0时代,我们使用的是pthread库,是一套用户级线程库,被广泛地使用在跨平台应用上.但在cocos2dx 3.0中并未发现有pthread的支持文件,原来c++11中已经拥有 ...
- C++11并发——多线程std::thread (一)
https://www.cnblogs.com/haippy/p/3284540.html 与 C++11 多线程相关的头文件 C++11 新标准中引入了四个头文件来支持多线程编程,他们分别是< ...
- C++11 多线程编程 使用lambda创建std::thread (生产/消费者模式)
要写个tcp server / client的博客,想着先写个c++11多线程程序.方便后面写博客使用. 目前c++11中写多线程已经很方便了,不用再像之前的pthread_create,c++11中 ...
- c++11中关于std::thread的join的思考
c++中关于std::thread的join的思考 std::thread是c++11新引入的线程标准库,通过其可以方便的编写与平台无关的多线程程序,虽然对比针对平台来定制化多线程库会使性能达到最大, ...
随机推荐
- C#调用Power Shell 管理Office365 执行脚本时遇到的问题
Power Shell管理Office参考http://www.mamicode.com/info-detail-494553.html C#调用Power Shell 参考 https://www. ...
- Express下ejs的视图模板引擎的建立
写在前面 由于Express升级到4.0,将ejs的用法忽略,改为用户自定义形式,所以要引入库index.js作为引擎,来支持ejs的模板引擎(点击下载). 首先是建立一个名字叫nodeitem,引擎 ...
- Python 开发GUI之UI界面的三种引入形式
[纯手工代码] # -*- coding: utf-8 -*- # Author:Jack LEE # FileName:main # CreatedDate: 2020/9/17 # 手写代码的基础 ...
- 最全总结 | 聊聊 Python 数据处理全家桶(Mysql 篇)
1. 前言 在爬虫.自动化.数据分析.软件测试.Web 等日常操作中,除 JSON.YAML.XML 外,还有一些数据经常会用到,比如:Mysql.Sqlite.Redis.MongoDB.Memch ...
- 我的Python自学之路-002 字典的知识
'''字典是python中唯一的验证类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算.根据计算的结果决定value的存储地址.所以字典是无序存储的.且key必 ...
- 企业项目实战 .Net Core + Vue/Angular 分库分表日志系统一 | 前言
教程预览 01 | 前言 02 | 简单的分库分表设计 03 | 控制反转搭配简单业务 04 | 强化设计方案 05 | 完善业务自动创建数据库 06 | 最终篇-通过AOP自动连接数据库-完成日志业 ...
- OOCSS是什么,该如何用?
1 OOCSS的定义: Object Oriented css(面向对象css)的缩写,是一种用最简单的方式编写的CSS代码,从而使代码 重用性,可维护性和可扩展性更好的书写方法. 2 OOCSS ...
- IOT(esp8266)
今日工具: 硬件: esp8266 DHT11温湿度传感器 软件: Arduino ESP8266 是一款由乐鑫 Espressif 公司制作的低成本的 Wi-Fi 芯片,具有完整的 TCP / IP ...
- APPCNA 指纹验证登录
今天在APP中集成了指纹与手势登录功能,本文章分两部分进行记录.一是手势功能的逻辑.二是代码实现.该APP是采用APPCAN开发,直接用其已写好的插件,调用相当接口就要可以了. 1.在APP的个人中心 ...
- 图文并茂C++精华总结 复习和进阶
字面常量不可以有引用,因为这也不需要使用符号来引用了,但是字面常量却可以初始化const引用,这将生成一个只读变量: 对变量的const修饰的引用是只读属性的: 也就是说,const修饰的引用,不管是 ...