Hangs on CreateDialogIndirect in CWinThread derived class
我是多线程新手。
我从CWinThread继承了一个名为CMyUIThread的类,并创建了一个名为CMyInfoDlg的对话框,该对话框具有文本和进度ctrl。 我将在新创建的线程中显示无模式对话框。 下面是部分代码:
1 2 3 4 5 6 7 8 9 10 | BOOL CMyUIThread::InitInstance() { // TODO: perform and per-thread initialization here // NOTE: the memory allocated below is freed by CMyInfoDlg::OnDestroy (it deletes itself) m_pDlg = new CMyInfoDlg(CWnd::FromHandle(m_hwndParent)); VERIFY( m_pDlg->Create(IDD_THREADUI_DIALOG, CWnd::FromHandle(m_hwndParent)) ); g_hwndProgress = m_pDlg->GetSafeHwnd(); ::ShowWindow(g_hwndProgress, SW_SHOW); // show window for the first time return TRUE; } |
在主框架中,我做了以下工作
1 2 3 | m_pThread = new CGSUIThread(m_hwndParent); m_pThread->m_bAutoDelete = FALSE; VERIFY( m_pThread->CreateThread() ); |
好。 在这种情况下,它可以正常工作。
但是,当我将其合并到另一个具有主体框架的大模块中时,出现了问题:它挂起了:
当我跟踪时,它被挂在CreateIndirectDialog上。
1 | BOOL CDialog::Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd) |
我不知道为什么会这样。
有人知道为什么吗?
最佳建议:检查调用堆栈。 您可以从MS服务器获取公共Windows符号,并查看挂起的内容。 最好的猜测可能是消息传递僵局,或者与CWnd *有关。 不过,请看一下调用堆栈,看看真正有什么悬而未决。