Resource Sharing issue
-
Dear All, 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. Scenario: 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. DisplayDialog() { 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************************" )); return; } } } CChildDlg::m_bDisply = true; CChildDlg objChild; objChild.DoModal(); 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()) { AfxGetApp()->PumpMessage(); } But both given same result.. Please help me.
-
Dear All, 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. Scenario: 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. DisplayDialog() { 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************************" )); return; } } } CChildDlg::m_bDisply = true; CChildDlg objChild; objChild.DoModal(); 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()) { AfxGetApp()->PumpMessage(); } But both given same result.. Please help me.
How can it terminate without showing the dialog and leave your flag set to true?
> The problem with computers is that they do what you tell them to do and not what you want them to do. < > Life: great graphics, but the gameplay sux. <