一、引言
当你的控制台程序是一个循环执行Task的任务体时,我们有时候会需要为程序增加强制的中断指令,譬如CTRL+C
.
先不说解决方法,如果让你去实现,阁下将如何破解。
思路自然很简单,我们可以在程序中捕获鼠标事件,判断同时按下CTRL+C
,然后让程序退出就行。
但是,我们下面给到的方法,是windows
已经为我们封装好的Hook
接口 SetConsoleCtrlHandler
,其底层实现逻辑其实与我们所想的也是一致的啦。
二、解决方法
#include <iostream>
#include <Windows.h>BOOL WINAPI ConsoleCtrlHandler(DWORD ctrlType) {if (ctrlType == CTRL_C_EVENT) {std::cout << "CTRL+C received. Exiting..." << std::endl; // 执行相应的操作return TRUE;}return FALSE;
}int main() {if (!SetConsoleCtrlHandler(ConsoleCtrlHandler, TRUE)) {std::cerr << "Error setting control handler" << std::endl;return 1;}// 模拟程序运行while (true) {// 程序主循环}return 0;
}
三、总结
方法很简单,不过需要注意的是,hook到程序中断信号时,记得相关资源的释放等,笔者不做过多介绍,简略说说。对于循环任务,我们一般会设置一个Flag,中断时让循环自动break退出,然后紧接着释放资源,让一切回到鸿蒙初开的状态~
真男人,不仅要进退自如,还要懂得优雅的停下~ —— 来自笔者