主对话框按钮一 运行AfxBeginThread(RUNTIME_CLASS(My_Thread));//创建线程···
然后
 BOOL MyThread::InitInstance()
02    {
03        // TODO:  perform and per-thread initialization here
04        CFrameWnd* pFrameWnd= new CFrameWnd();                    //定义框架对象
05        pFrameWnd->CreateEx(0,AfxRegisterWndClass( CS_HREDRAW|CS_VREDRAW) ,
06                "用户界面线程示例",    
07                WS_OVERLAPPEDWINDOW|WS_VISIBLE,
08                CRect(100,100,400,300),
09                NULL,
10                0);                                             //创建窗口
11        m_pMainWnd=pFrameWnd;
12        pFrameWnd->ShowWindow(SW_SHOW);                        //显示窗口
13        pFrameWnd->UpdateWindow();
14        return TRUE;
15    }
创建新线程的窗口
接着新的线程的窗口   就是子线程运行到Sleep(30000);的时候···发现主对话框(主线程)也··停止了···
问题:为什么用户界面线程Sleep会影响到主线程···

解决方案 »

  1.   

    AfxBeginThread(RUNTIME_CLASS(My_Thread));//
    没返回,造成主界面停住了不要在InitInstance中Sleep,主线程给子线程PostThreadMessage,然后消息函数中Sleep等
      

  2.   

    补充一点····在InitInstance中开头中加入一句Sleep(0);之后···发现一切正常···主线程又可以动了··
      

  3.   

    VC2010调试后····AfxBeginThread(RUNTIME_CLASS(My_Thread));//
    返回了···然后子线程运行并创建出窗口·····然后那个窗口运行到Sleep··就连主线程都不动了但是很奇怪的是····在InitInstance中Sleep之后创建的子窗口····子窗口Sleep并不影响主线程···继续求原因···
      

  4.   

    在子窗口的 PostNcDestroy函数里写的Sleep    也就是我点击关闭子窗口时···运行PostNcDestroy函数
    ,Sleep    就这样了····主线程也停了
      

  5.   

    补充···经测试后···在子窗口类中的任何函数什么中···只要有Sleep都会造成主线程停止···但是  只要在InitInstance中Sleep下·····就一切正常···主线程也不停止
      

  6.   

    我新建一个工程测试下楼主代码··这情况确实存在·······会不会是VC2010的BUG?
    void C用户界面线程Dlg::OnBnClickedButton1()
    {
    // TODO: 在此添加控件通知处理程序代码
    AfxBeginThread(RUNTIME_CLASS(MyThread));                }
    BOOL MyThread::InitInstance()
    {
    // TODO: 在此执行任意逐线程初始化
    cc* a=new cc;
    a->Create(IDD_DIALOG1,NULL);
    a->ShowWindow(SW_SHOW);
    return TRUE;
    }void cc::OnBnClickedOk()
    {
    // TODO: 在此添加控件通知处理程序代码
    Sleep(15000);//子窗口单击按钮运行到这里之后···主线程和子线程都停止了···
    CDialogEx::OnOK();
    }
      

  7.   

    Sleep(0)是指CPU交出当前线程的执行权
    让CPU去执行其他线程
    也就是放弃当前线程的时间片
    转而执行其他线程