zoukankan      html  css  js  c++  java
  • 第二十三章 终止处理程序

    ①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块。
    • 全局展开:后两章详解
  • 相关阅读:
    斐波那契数列 的两种实现方式(Java)
    单链表反转
    单链表合并
    两个有序list合并
    list去重 转载
    RemoveAll 要重写equals方法
    Java for LeetCode 138 Copy List with Random Pointer
    Java for LeetCode 137 Single Number II
    Java for LeetCode 136 Single Number
    Java for LeetCode 135 Candy
  • 原文地址:https://www.cnblogs.com/WillingCPP/p/3074414.html
Copyright © 2011-2022 走看看