在开发控制台应用程序时经常会遇到一种情况,就是当点击关闭按钮时程序仍在处理一些任务,此时如果强制退出会导致任务处理异常。因此,程序需要响应点击关闭按钮的事件并等待当前任务处理完成。具体方法如下,这里用休眠10秒模拟任务,当点击关闭按钮后,每隔一秒钟检测一下任务是否正在运行。
using namespace std;
BOOL bTaskRunning = FALSE;
BOOL WINAPI ConsoleCtrlHandler(DWORD dwCtrlType);
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
_tprintf(_T("错误: MFC 初始化失败\n"));
nRetCode = 1;
}
else
{
SetConsoleCtrlHandler(ConsoleCtrlHandler, TRUE);
while (TRUE)
{
bTaskRunning = TRUE;
Sleep(10 * 1000);
bTaskRunning = FALSE;
}
SetConsoleCtrlHandler(ConsoleCtrlHandler, FALSE);
}
return nRetCode;
}
BOOL WINAPI ConsoleCtrlHandler(DWORD dwCtrlType)
{
if (dwCtrlType == CTRL_CLOSE_EVENT)
{
BOOL bFlag = TRUE;
while (bTaskRunning)
{
if (bFlag)
{
_tprintf(_T("Waiting for task exit ...\n"));
bFlag = FALSE;
}
Sleep(1000);
}
return TRUE;
}
return FALSE;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)