C/C++控制台安全退出,2018年最新方法
非正常退出:
退出的结果:
bool g_bExit = false; HANDLE g_hEvent = INVALID_HANDLE_VALUE; BOOL CALLBACK CosonleHandler(DWORD ev) { BOOL bRet = FALSE; switch (ev) { // the user wants to exit. case CTRL_CLOSE_EVENT: // Handle the CTRL-C signal. case CTRL_C_EVENT: case CTRL_SHUTDOWN_EVENT: case CTRL_LOGOFF_EVENT: g_bExit = true; // 停住,让主线程执行清理任务 WaitForSingleObject(g_hEvent, -1); // 注意事件在这里清理 CloseHandle(g_hEvent); bRet = TRUE; break; default: break; } return bRet; } int main() { SetConsoleCtrlHandler(CosonleHandler, TRUE); g_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); // 初始化 do { // 模拟任务执行 printf("."); Sleep(1000); } while (!g_bExit); // 主程序清理 SetEvent(g_hEvent); return 0; }
有问题,在下方留言。