I have resource sharing issue in my MFC programming. Below, I will describe the scenario.
I am using VC++ 6.o version
I have a dialog(modeless) based application.
Main dialog box has a Button( say "Button1" ) with OnButton1(), that will call member function DisplayChildDialog()
I have a worker thread also, that will call DisplayChildDialog() using PostMessage() of main dialog.
DisplayChildDialog() will dispaly a child dialog(modal). Child dialog's object is created locally in DisplayChildDialog().
So DisplayChildDialog() will always called from the GUI thread.
When I clicks on "Button1", OnButton1() will call a member function DisplayChildDialog() and a child dialog(modal) will appear.
This time worker thread will also call DisplayChildDialog() using PostMessage() of Main dialog.
When I click on "Button1" DisplayChildDialog() will also call from worker thread using PostMessage(). of the main dialog. So two dialogs will appear simultaniously.
To avoid this situation I made the second caller of DisplayDialog() to enter in a MessageLoop, and will check a flag that will infrom whether the first caller has left the DisplayChildDialog() or not.
I wrote the message loop in DisplayDialog() like this.
if( CChildDlg::m_bDisply == true )
while( GetMessage( &stMsg, 0, 0, 0 ))
TranslateMessage( &stMsg );
DispatchMessage( &stMsg );
if( false == CChildDialog::m_bDisply )
OutputDebugString( _T( "### Message loop false************************" ));
CChildDlg::m_bDisply = true;
CChildDlg::m_bDisply = false;
But this will work 5 or 6 times correctly. But after that, when I clicks on "Button1", the first caller of DisplayDialog() will terminate before showing the dialog box it will just make CChildDlg::m_bDisply = true. So the second caller will enter in Message loop and never exit.
I tried this too instead of above given message loop:
while( CChildDlg::m_bDisply && WaitMessage())
But both given same result..
Please help me.