Windows下C++的异常处理

异常处理分两种,一种是语言的异常处理,这个异常处理是由语言的语法标准规定的,任何平台通用,只要编译器支持;一种是系统的异常处理,这个是由系统提供的,不是语言的特性,而是平台的特性,Windows下的系统异常处理,放到Linux下就没法使用了。

C++语言的异常处理,是用于处理语言本身的一些问题,如指针为空、如除数为0,之类的。这没什么多说的。

try
{
	//可能抛出异常的语句
}
catch (异常类型1 异常对象)
{
	//针对异常类型1的异常处理
}
catch (异常类型2 异常对象)
{
	//针对异常类型2的异常处理
}
catch (...)
{
	//针对其他异常类型的异常处理
}

重点要描述的是系统的异常处理。

语言的异常处理并没有办法catch住所有的异常。比如在用VS开发时,有时会碰到“未处理的异常”,然后弹出一个框,代码停在出错的地方。类似于内存访问越界之类的。这种由系统报出的异常,即使在错误代码段加入了try-catch也没有效果,因为这种错是没有办法用try-catch捕获的。通常我们可以解决掉这个异常,让它不再出错,但是总会有没有发现的地方,所以需要捕获系统异常。

为了要捕获Windows系统抛出的异常,就需要用到Windows的一套异常捕获。

int filter(unsigned int code, struct _EXCEPTION_POINTERS *ep)
{
	if (code == EXCEPTION_ACCESS_VIOLATION) 
	{
		//
		return EXCEPTION_EXECUTE_HANDLER;
	}
	//........
	else 
	{
		//
		return EXCEPTION_CONTINUE_SEARCH;
	};
}

void TestFunction()
{
	__try
	{
		//保护区域
	}
	__except(filter(GetExceptionCode(), GetExceptionInformation()))
	{
		//
	}
	__finally
	{
		//
	}
}

这样就可以捕获到系统的异常了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows服务进程是一种在Windows操作系统下运行的后台程序,通常以服务的形式运行。而守护线程是服务进程中负责监控和处理特定任务的线程。 守护线程可以理解为服务进程中的"看门狗",它负责监视服务进程的运行状态并及时进行处理。它可以周期性地检查服务进程的状态,比如进程是否假死、内存是否泄露等。一旦发现异常情况,守护线程会及时采取相应措施来修复或重启服务进程,以确保服务的正常运行。 守护线程具有以下特点: 1. 自动修复:当服务进程出现异常时,守护线程可以根据预定的修复策略自动采取措施来修复问题。比如重新启动服务进程、释放内存或重置资源等。 2. 监控功能:守护线程通过检查服务进程的运行状态,包括内存使用情况、请求响应时间和CPU使用率等,来监控服务进程的健康状况。一旦发现异常情况,守护线程会及时发出警报并采取相应的处理措施。 3. 异常处理:守护线程可以捕获服务进程抛出的异常,并根据配置的策略进行处理。比如记录日志、发送通知或执行特定的修复任务。 4. 高可靠性:通过使用守护线程,可以提升服务进程的可靠性和稳定性。一旦服务进程出现异常或崩溃,守护线程能够迅速检测并采取措施,避免长时间的服务中断。 总的来说,守护线程在Windows服务进程中扮演着非常重要的角色,它能够确保服务的稳定运行,并及时监控和处理异常情况,提升了服务的可靠性和可用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值