我想实现在处理时间比较长的任务时,显示一个动画窗口提示任务正在处理中。所以我创建了一个新的线程,该线程中创建了一个非模态的对话框,在该对话框上用了一个animate控件。如果在创建该对话框后使用死循环的话,就不会显示动画,而且CPU占用率为100%。所以我使用GetMessage,然后DispatchMessage的方法,不知道有没有什么问题。还有就是我使用CreateThread建立线程,是否不需要显式的结束线程。在该线程结束后,是否会自动释放资源,而不需要使用DestroyWindow。
我是初学者,请多多指教

解决方案 »

  1.   

    如果是HT型的CPU那应该和你BIOS有关.如果不是.我就不知道了
      

  2.   

    窗口不会自动Destroy,需要你自己编码实现另:线程的安全结束方法是线程函数return
      

  3.   

    我用的Celeron的CPU,我用HP的服务器(好象是P4的)也一样啊
    是不是需要先调用DestroyWindow,再使用ExitThread啊。
    to freefalcon(心宇—小小菜鸟想高飞),用return就可以结束了吗,不使用CloseHandle吗
      

  4.   

    你可以创建一个UI线程,来显示动画从CWinThread类派生一个子类,比如CMyThread类,在InitInstance函数中创建你药显示动画的窗口
    例如:
    BOOL CMyNewThread::InitInstance()
    {
    RECT rc;
    rc.bottom = 300;
    rc.top = 100;
    rc.left = 100;
    rc.right = 400;
    m_Frame = new CMyFrame();
    int frame = m_Frame->Create(NULL,"Frame",WS_OVERLAPPEDWINDOW,rc,this->m_pMainWnd);
    m_Frame->SetParent(m_pMainWnd->GetParent());
    m_Frame->ShowWindow(SW_SHOW);
    m_Frame->UpdateWindow();
    return TRUE;//
    }
    CMyFrame类是从CFrameWnd派生的一个子类,是一个框架窗口,视你的要求而定,你可以设置窗口的风格,比如无边框等等,来达到显示动画更好的效果!在主线程中你可以这样启动UI线程m_pNewThread = new CMyNewThread();
    m_pNewThread->m_pMainWnd = this->GetParent();
    m_pNewThread->CreateThread();
    .m_NewThread为指向CMyWinThread类的指针,在头文件中定义如下;
    CMyNewThread* m_pNewThread;
    .在主线程计算任务结束之后可以通过使用
    PostThreadMessage(m_pNewThread->m_nThreadID, WM_CLOSE, 0, 0);
    消息来结束UI线程的执行!一个思路,希望对你有所帮助!
      

  5.   

    这和CPU无关吧?
    使用DestroyWindow(hWnd)后,再用ExitThread就可以了。进程句柄不用管的。
      

  6.   

    to vcforever(霓裳羽衣) :
    不好意思,不大懂MFC,我是用的SDK,你能不能用C描述一下。to snowroad(雪程) :
    请问如果不使用循环的话,该线程创建后就马上运行,窗口一闪就没了,线程也结束了。请问我使用发送消息的方法对不对。
      

  7.   

    "CPU占用率为100%"
    线程死循环的CPU占用率当然是100%,你可以在循环中加上sleep(10)这样的语句调节它的CPU使用率。
      

  8.   

    同意skyMountain(天山) ,sleep(0)吧