Вот такой вопрос.
есть два threda в обоих есть два модальных диалога. Когда закрывается один нужно закрыть и второй.
// в общей части
CDlg1 *Dlg1;
CDlg2 *Dlg2;
// в первом thred-e
Dlg1 = new CDlg1();
int RetDlg1 = Dlg1->DoModal();
// во втором thred-e
Dlg2 = new CDlg2();
int RetDlg2 = Dlg2->DoModal();
Если делаю так:
// в первом thred-e
void CDlg1::OnCancel()
{
if (Dlg2) {
Dlg2->EndDialog(IDCANCEL);
}
CDialog::OnCancel();
}
то все работает, но стремно - все-таки за окно отвечает другой поток, там тоже работают с Dlg2, закрывают, чистят, смотрят, качают сообщения. А при таком коде все закрытие окна пойдет в первом therd-е, параллельно - ой боюсь боюсь. Надо бы поставить критическую секцию, но лень, да и куда. Я хотел бы вот так сделать:
::EndDialog(Dlg2->m_hWnd, IDCANCEL);
но так почему-то не работает до конца. Окно закрывается, но сам трейд, вернее подкачка сообщений окна не видет того что окно закрылось и качает качакет - не понятно что.
Хотя второй вариант, тоже череват - Dlg2 может уже оказаться сброшенным в NULL.