我的程序使用CProgressCtrl控件时,希望在等待程序执行时,能有时钟控制进度,代码如下:
CTime init,incr;
init=CTime::GetCurrentTime();
int incrt0,incrt1,a1,a0;
incrt0=init.GetSecond();
a0=init.GetMinute();while(1)
{
m_progress->SetRange(0,100);
m_progress->SetPos(0);
incr=CTime::GetCurrentTime();
a1=incr.GetMinute();
incrt1=(a1-a0)*60+incr.GetSecond()-incrt0;
m_progress->SetPos(incrt1);
};
在程序执行时,最后死掉了,请问各位大侠,这是为什么啊?是不是我没有给进度设置终止条件啊?

解决方案 »

  1.   

    incrt1=(a1-a0)*60+incr.GetSecond()-incrt0;
    --你如何确保这个计算结果是正整数呢?
      

  2.   

    难道不是整数啊?
    我看GetSecond和GetMinute都是整型函数啊,它们的四则运算难道不是整数啊,呵呵
      

  3.   

    init.GetMinute();这个函数只是得到当前的分钟数是多少。如果跨了小时,那么当然有可能后面的分钟数小于前面的分钟数了。
      

  4.   

    你的While(1)中没有退出条件,程序就象司机一样了
      

  5.   

    m_progress->SetRange(0,100);
    m_progress->SetPos(0);
    这两句应该放在循环外面。从代码来看,你的while没有退出条件,当然会死。而且,你的while如果放在界面线程里面,界面会死掉。你或者用一个线程来完成这些动作。还有个方法,在你的循环里面完成消息循环,这样界面不会死。把下面的函数添加进去,然后在你的while里面调用这个函数:BOOL PeekAndPump()
    {
      static MSG msg;  while(::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
      {
      if(!AfxGetApp()->PumpMessage())
        {
      ::PostQuitMessage(0);
      return FALSE;
      }
      }  return TRUE;
    }