第二十三章 终止处理程序
①SEH (structured excepttion handling)结构化异常处理 {终止处理程序,异常处理程序}
终止处理程序:__try{/*try块*/}__finally{/*finally块*/}
②为什么使用结构化异常处理?
- 清理工作集中在一个地方执行,保证得到执行
- 可以提高代码可读性
- 让代码更容易维护
- 正确使用对程序性能和体积的影响是很小的
③清理工作集中在一个地方执行,保证得到执行例子
//try+finaly+leave应用例子//__leave导致代码执行控制跳转到try块的结尾。
DWORD SEHExample() { HANDLE hfile = INVALID_HANDLE_VALUE; PVOID pvBuf = NULL; BOOL bReturn = FALSE; __try { DWORD dwNumBytesRead; BOOL bOk; hfile = CreateFile(TEXT("SOMEDATA.DAT"),GENERIC_READ, FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL); if (hfile == NULL) { __leave; } pvBuf = VirtualAlloc(NULL,1024,MEM_COMMIT,PAGE_EXECUTE_READ); if(pvBuf == NULL) { __leave; } bOk =ReadFile(hfile,pvBuf,1024,&dwNumBytesRead,NULL) if(!bOk || (dwNumBytesRead == 0)) { __leave; } bReturn = TRUE; } __finally { if (pvBuf != NULL) { VirtualFree(pvBuf,MEM_RELEASE|MEM_DECOMMIT); pvBuf = NULL; } if (hfile != INVALID_HANDLE_VALUE) { CloseHandle(hfile); hfile = NULL; } } return bReturn; }
__finaly注意事项
- try块到finally的正常代码控制流
- 局部展开:try中的提前退出 (goto,longjump,continue,break,return)强制进入finally块。
- 全局展开:后两章详解
posted on 2013-05-12 20:09 WillingCPP 阅读(182) 评论(0) 编辑 收藏 举报