因为你有while循环,会阻塞主线程消息,所以要开线程。

解决方案 »

  1.   


    我用timeSetEvent 定时500ms 调用一次,但获取的不对,FILETIME preidleTime;
        FILETIME prekernelTime;
        FILETIME preuserTime;
        FILETIME idleTime;
        FILETIME kernelTime;
        FILETIME userTime;这几个变量用全局或静态试了,界面不卡但数据不正确?真不想开线程了,我的线程经很多。
      

  2.   

    Sleep(500);这个改成消息循环就不会卡了, 
    或者你的这个函数在定时器调用, 不要Sleep
      

  3.   

    楼主
    MFC有个主线程的,主线程就是界面线程
    void Cmfc_cpuDlg::OnBnClickedButton1()
    这个函数就是界面线程运行的也就是当你按一下按钮,就会发1个对应的消息,给界面线程,界面线程就进入到这个函数。界面线程的消息处理是MSG msg ;        
    while(TRUE)       
     {            
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))           
        {                
            if (msg.message == WM_QUIT)                 
            {
                         break;                
            }               
            DispatchMessage(&msg);            
        }
     }
    主线程 DispatchMessage  --->  void Cmfc_cpuDlg::OnBnClickedButton1()的时候里面用到了while,一直不返回,界面线程就卡住了,界面线程还怎么处理其他消息,不能处理其他消息,界面不就卡住了?
      

  4.   

    一个线程就是一条线
    ----->-----while在这---->-----------这里UI操作------------->
    while一直在执行,后面的界面当然没反应了.
    timeSetEvent 好像也是新开的线程吧. setTimer是不开新线程的.
    数据不对是你弄错了.和计时器没关系