SetConsoleCtrlHandler() -- 设置控制台信号处理函数
http://www.groad.net/bbs/thread-8253-1-1.html
當你在命令行里工作時,經常會輸入 Ctrl-C 這個組合鍵以停止程序的運行。SetConsoleCtrlHandler() 函數可以讓一個或多個特定函數在接收到 Ctrl-C, Ctrl-break 這些與控制臺有關的信號時得到執行。
函數有兩個參數,第 1 個參數是要安裝的信號處理函數,當第 2 個參數 Add 設置為 TRUE 時,那么就安裝第 1 個參數所表示的處理函數;否則,就從控制臺控制例程列表中將之刪除。需要注意的是,這里沒有指定信號,測試到底是什么信號,是處理程序所負責的事情。
函數的返回值是個布爾值,當函數執行成功時,返回非 0 值;反之,返回 0 值,具體的出錯原因,可以用?GetLastError()?函數來獲得。
如果第 1 個參數設置為 NULL,且 Add 為 TRUE 時,那么 Ctrl-C 信號會被忽略。
如果已經使用?SetConsoleMode() 設置了 ENABLE_PROCESSED_INPUT 標志,那么系統會將 Ctrl-C 作為鍵盤輸入處理,而不是作為信號處理。
處理程序例程實際上是以進程內的獨立線程執行的,正常的程序將繼續操作。
處理程序:
帶有一個 DWORD 類型值 dwCtrlType ,它用來標識信號(或事件),可以是以下 5 個值之一:
1) CTRL_C_EVENT 表示鍵盤輸入了 Ctrl-C 。
2) CTRL_CLOSE_EVENT 表示控制臺窗口正在被關閉。
3) CTRL_BREAK_EVENT 表示 Ctrl_break 信號。
4) CTRL_LOGOFF_EVENT 表示用戶正在注銷。
5) CTRL_SHUTDOWN_EVENT 表示 Windows 正在關閉。
信號處理程序可以像異常或終止程序那樣執行清理操作。當信號處理程序返回 TRUE 時,表示函數已經處理了信號;若是返回 FALSE ,那么就去執行列表中下一個處理程序函數。信號處理程序與設置順序相反的順序執行,也就是說,最后一個設置程序將被首先執行,而系統的處理程序在最后執行。
轉載于:https://www.cnblogs.com/NickyYe/p/5512084.html
總結
以上是生活随笔為你收集整理的SetConsoleCtrlHandler() -- 设置控制台信号处理函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 配置maven及阿里云镜像
- 下一篇: 在哪里可以找水系图_请问在哪可以找到广西