Windows线程异常捕捉
来源:互联网 发布:ipadpro下载软件流程 编辑:程序博客网 时间:2024/06/05 08:50
参考:http://www.cppblog.com/weiym/archive/2015/02/27/209884.html
参考:http://blog.csdn.net/y84161838/article/details/5777388
在Windows中,__try, __excetpt是在Windows程序中提供的SHE异常处理的机制。在__except的函数参数取值有三类:最常用的是EXCEPTION_EXECUTE_HANDLER (1)
EXCEPTION_CONTINUE_EXECUTION (–1) 异常被忽略,控制流将在异常出现的点之后,继续恢复运行。
EXCEPTION_CONTINUE_SEARCH (0) 异常不被识别,也即当前的这个__except模块不是这个异常错误所对应的正确的异常处理模块。系统将继续到上一层的try-except域中继续查找一个恰当的__except模块。
EXCEPTION_EXECUTE_HANDLER (1) 异常已经被识别,也即当前的这个异常错误,系统已经找到了并能够确认,这个__except模块就是正确的异常处理模块。控制流将进入到__except模块中。
对于多线程程序,在主线程做下面异常捕捉,是不能实现子线程的异常捕捉处理的,整个程序会因为线程的异常而崩溃掉。
MainThread
ChildThread1
ChildThread2
ChildThread3
例如:在MainThread做异常处理,当Thread的run函数执行异常时,是捕捉不到的
__try
{
m_pThread1->start();
m_pThread2->start();
m_pThread3->start();
}
__except(EXCEPTION_EXECUTE_HANDLER) // 1:异常被识别
{
promptContent(this);
}
如果要捕捉线程run过程中的异常,需要在Thread的run函数中捕捉异常
void CMyThread::run()
{
__try
{
runContent(m_sThreadName,m_pParent);
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
promptContent(m_sThreadName,m_pParent);
quit();
}
}
这样,当线程运行产生异常,就有线程中的异常捕捉方法来捕获异常,处理异常。
程序就不会因为线程崩溃而无法继续执行下去。
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
- Windows线程异常捕捉
- 捕捉线程的异常
- 捕捉线程异常
- 异常捕捉线程
- Java线程学习笔记(二) 线程的异常捕捉
- 主线程捕捉线程池中线程抛出的异常
- 异常捕捉
- 异常捕捉
- 捕捉异常
- 异常捕捉
- 捕捉异常
- 异常捕捉
- C#如何捕捉Windows服务与WinForm的全局异常
- windows下客户软件崩溃异常捕捉和处理
- 捕捉Windows服务与WinForm的全局异常
- 捕捉异常 (Visual C#)
- delphi异常信息捕捉
- 异常捕捉工具[转]
- iOS开发:Compile Sources(编译来源)与 Copy Bundle Resources(资源文件)
- python解析torrent文件库:pytorrent
- Lightoj 1008 - Fibsieve`s Fantabulous Birthday
- Caffe入门(1)——Ubuntu 16.04 caffe无GPU模式安装
- ARM Linux系统下如何修改动态IP为静态IP地址
- Windows线程异常捕捉
- 【Light-oj】-1282 - Leading and Trailing(数论,快速幂,log,好)
- django执行原生sql
- 第六章 6.2 参数传递
- 关于LeetCode中Maximum Depth of Binary Tree一题的理解
- mysql的初次接触
- Light OJ:1045 Digits of Factorial(数学+思维+对数)
- jdbc事务和事务的隔离级别
- nginx访问报错403 is forbidden