【发布时间】:2010-10-03 23:50:42
【问题描述】:
我已经开发了一个控制台 ATL 应用程序并且想要捕获关闭?、退出?、终止?事件,以便我可以关闭日志文件并在退出时执行常规清理。
如何捕获因某人在任务管理器中结束 .exe 而导致的“终止”事件?
编辑:
这是一个控制台应用程序,我已经附加了主类。您能否指出我应该在哪里以及如何使用SetConsoleCtrlHandler?
// Override CAtlExeModuleT members
int WinMain(int nShowCmd) throw()
{
if (CAtlBaseModule::m_bInitFailed) //ctor failed somewhere
{
ATLASSERT(0);
return -1;
}
HRESULT hr = S_OK;
LPTSTR lpCmdLine = GetCommandLine(); //this line necessary for _ATL_MIN_CRT
if( ParseCommandLine( lpCmdLine, &hr ) )
{
if( SUCCEEDED( RegisterClassObjects( CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE ) ) )
{
CComPtr<IRORCAdapterMain> pAdapter;
if( SUCCEEDED( pAdapter.CoCreateInstance( L"RORCAdapter.RORCAdapterMain" ) ) )
{
if( SUCCEEDED( pAdapter->StartAdapter() ) )
{
MSG msg;
while( GetMessage( &msg, 0, 0, 0 ) )
DispatchMessage( &msg );
}
}
RevokeClassObjects();
}
}
【问题讨论】:
-
您的问题实际上是关于 ATL,而不是 C++;考虑更改问题的标题...
-
你有一个消息泵,当你得到 WM_QUIT 时应该退出 while 循环。还要检查 GetMessage 文档,因为您的消息循环可能存在错误。
标签: c++ atl exit-handler