编一个小程序,用了三个Edit Box,num、spa.zenith和flag随程序的运行是不断变化的,但现在三个Edit Box中只显示第一次运行结果,并没有实时显示程序的结果,如何修改程序,请赐教。程序段如下:            do
            {
                t=time(0); 
                local=localtime(&t);                ShellExecute(NULL,"open","d:\GZJD.exe",NULL,NULL,SW_SHOWNORMAL);                 if(num-spa.zenith>-0.5 && num-spa.zenith<0.5)
                    flag="on";
                else 
                    flag="off";                Sleep(1000);                 /**************************/                  UpdateData(TRUE);
                m_Bianmaqi=num;
                m_Jisuanzhi=spa.zenith;
                m_Dianjizhuangtai=flag;
                UpdateData(FALSE);                /**************************/  
             } while(t>=sunrisetime && t<=sunsettime);

解决方案 »

  1.   

    如果是在界面线程工作, 请去掉sleep, 不然卡死桌面的. 因为消息已经无法传递或者响应了. 你debug下, 看看是不是edit的值改变成功了每次. 
      

  2.   

    用SetWindowText()来设置文本框的内容
      

  3.   


    程序运行过程中,确实出现muzizongheng兄所说的卡死现象。我现在只用单线程操作,想让程序暂停1S,,参照论坛上的帖子,抛弃sleep()函数后,改用:
    /****************延时操作****************/
    DWORD dwStart = GetTickCount();
    DWORD dwEnd = dwStart;
    do
    {  
       dwEnd = GetTickCount(); 
    } while((dwEnd - dwStart) <=1000); /****************延时操作****************/现在程序还是出现卡死现象,这是咋回事?
      

  4.   


    一样啊, 你的界面线程因为这个while循环空转啊, cpu会高, 也会卡的.
      

  5.   


     /****************延时操作****************/
    DWORD dwStart = GetTickCount();
    DWORD dwEnd = dwStart;
    do{  
         MSG  msg;
         GetMessage(&msg,NULL,0,0); 
         TranslateMessage(&msg);
         DispatchMessage(&msg); 
         dwEnd = GetTickCount(); 
    } while((dwEnd - dwStart) <=1000); /****************延时操作****************/用以上的代码执行延时操作后,不再出现卡死现象。但并未能实现实时显示程序计算数据(程序设置1s更新数据),滞后情况严重。请问如何解决。先行谢过。
      

  6.   


    muzizongheng兄,您好!首先对您的热心帮助表示感谢!我按您说的对程序进行了改动,但现在实时显示的状况还是有些糟糕,现在我把这段代码贴上,请再帮我诊断一下。[code=C/C++]if(t>=sunrisetime)
                do
                {
                    t=time(0); 
                    local=localtime(&t);
     
                    spa.year          = local->tm_year+1900; 
                    spa.month         = local->tm_mon;      
                    spa.day           = local->tm_mday;      
                    spa.hour          = local->tm_hour;      
                    spa.minute        = local->tm_min;       
                    spa.second        = local->tm_sec;       
                    spa.timezone      = 8;
                    spa.delta_t       = 67;    
                    spa.longitude     = 113.2;
                    spa.latitude      = 23.1;
                    spa.elevation     = 41;
                    spa.pressure      = 1008.4;
                    spa.temperature   = 22.4;
                    spa.slope         = 30;    
                    spa.azm_rotation  = -10;   
                    spa.atmos_refract = 0.5667; 
                    spa.function      = SPA_ALL;    
                    pt.tm_year  =spa.year-1900;
                    pt.tm_mon   = spa.month; 
                    pt.tm_mday  = spa.day; 
                    pt.tm_isdst =0;                result = spa_calculate(&spa);
                    if (result == 0)  
                    {
                        min = 60.0*(spa.sunrise - (int)(spa.sunrise));
                        sec = 60.0*(min - (int)min);
                        pt.tm_hour = (int)(spa.sunrise); 
                        pt.tm_min  = (int)min; 
                        pt.tm_sec  = (int)sec; 
                        sunrisetime=mktime(&pt);
             
                        min = 60.0*(spa.sunset - (int)(spa.sunset));
                        sec = 60.0*(min - (int)min);
                        pt.tm_hour = (int)(spa.sunset); 
                        pt.tm_min  = (int)min; 
                        pt.tm_sec  = (int)sec; 
                        sunsettime=mktime(&pt);      
                    }                 ShellExecute(NULL,"open","d:\GZJD.exe",NULL,NULL,SW_SHOWNORMAL);                 num=GAM60Value();                if(num-spa.zenith>-0.5 && num-spa.zenith<0.5)
                        flag="on";
                    else 
                        flag="off";
            
                    /****************延时操作****************/
                    DWORD dwStart = GetTickCount();
                    DWORD dwEnd = dwStart;
                    do{  
                        MSG  msg;
                        GetMessage(&msg,NULL,0,0); 
                        TranslateMessage(&msg);
                        DispatchMessage(&msg); 
                        dwEnd = GetTickCount(); 
                        
                    } while((dwEnd - dwStart) <=1500); 
                    /****************延时操作****************/
                      
                    UpdateData(TRUE);                m_Bianmaqi=num;
                    m_Jisuanzhi=spa.zenith;
                    m_Dianjizhuangtai=flag;                UpdateData(FALSE);
                    UpdateWindow();            } while(t>=sunrisetime && t<=sunsettime);code]
      

  7.   

    给代码发来
    [email protected]