Re: theApp.ExitInstance(); returns 20 - what does this mean?
"Mechi" <mechif@gmail.com> wrote in message
news:1b276b24-818f-42e2-9557-30b7570a16dd@d10g2000yqh.googlegroups.com...
Hi!
I have a dialog based application. It always exits with 20 - though i
think it should exit with 0.
In a dialog application, you typically show the dialog in InitInstance(),
wait for the DoModal() call to return, then return FALSE from InitInstance()
so your app closes without starting a message pump.
Because you do not override ExitInstance() (and it is not even called) in
this scenario, you don't have the ability to set a proper return code.
Essentially the return code is garbage depending on the last message pumped,
I believe.
Bottom line is if you care about the return code, you can't call DoModal()
in InitInstance() like this. Instead you need to start a message pump so
that ExitInstance is called. This typically means showing a CMainFrame
(perhaps with no menu bar, toolbar, or status bar) containing a CFormView of
your original dialog.
The only thread that is opened is the
GUI/dialog itself. I open and then immediately (afte GUI is
displayed) close the application.
after
int nResponse = dlg.DoModal();
CoUninitialize();
I call (just to be able to catch the error):
int err = theApp.ExitInstance();
err returns = 20.
I don't know how CWinApp::ExitInstance() determines it's return value, but
it doesn't really matter because there is no way for you to then set this
value to the return value of your app.
I traced into thrdcore.cpp, below.
MSG* AFXAPI AfxGetCurrentMessage()
{
_AFX_THREAD_STATE* pState = AfxGetThreadState();
ASSERT(pState);
return &(pState->m_msgCur);
}
There is obviously a thread wtill running - as I saw in the Thread
list:
3084 __tmainCRTStartup CCamelotSampleApp::InitInstance Normal 0
2244 Win32 Thread _KiFastSystemCallRet@0 Normal 0
How do I ensure that the GUI thread closes before the application
does?
It does. But you haven't returned from CCamelotSampleApp::InitInstance()
yet when you look at the call stack; you are looking too early.
-- David