BOOL CUIThread::InitInstance()
{
m_dlg.Create(IDD_UITHREADDLG);
m_dlg.ShowWindow(SW_SHOW); return TRUE;
}int CUIThread::ExitInstance()
{
m_dlg.DestroyWindow();
return CWinThread::ExitInstance();
}下面的代码用来创建弹出提示框的线程,且等程序运行10秒后,销毁弹出的对话框,结束线程
m_pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread)); Sleep(10000);
AfxMessageBox("sdsdf"); TerminateThread(m_pThread->m_hThread, 0);在上面的代码中如果有AfxMessageBox("sdsdf")代码,功能可以实现,但是如果我把AfxMessageBox("sdsdf");注释后
线程中的对话框无法弹出,请高手帮忙想想办法。

解决方案 »

  1.   

    Create函数的第2参数缺省值是NULL,会把主窗口作为其父窗口,创建窗口时会向其父窗口SendMessage,而你的主线程处于Sleep状态,没有取消息,所以SendMessage会一直等待,所以窗口不会显示。这样改一下就可以了:
    m_dlg.Create(IDD_UITHREADDLG, CWnd::GetDesktopWindow());
      

  2.   

    你可以不用sleep,而是设置一个记时器,在10s的时候响应窗体的关闭消息,建议不使用 Terminate,这个API属于dangerous API,你写的程序可能有一天因为它需要大动手术.微软在2008 WinHEC上提到了关于对应OEM Ready的问题.
    呵呵,扯远了.
      

  3.   

    waitforsingleobject(m_pthread,5000);
    你这样试下不知道可不可以啊