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;
}

有问题,在下方留言。


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页