我用的是VC++ 6.0;for(nList=1;nList<=x;nList++)
{
...............
一些复杂计算....
...............m_progress1.SetPos(nList*100.0/x);
}其中 m_progress1是Progress控件对应的控件变量;问题是:
当第一次运行程序是,x取值较小;正常工作。进度条从0~100%。但是如果立刻改变x值,且x比第一次的值大(不重启程序,通过界面修改),再运行到上面for循环中。发现进度到回到一定值(比如60%)就不前进了。for循环是正常运行的。而且for循环结束后,进度条正常显示为100%。也就是其中有一段不到100%过程进度条是不动的。如果第一次运行结束,过一阵时间(大于1分钟),在进行x取大值的操作,正进度条又可以0~100%完全正常滚动了。我想是不是有什么变量存在内存回收时间的问题!! 谢谢大家帮忙解答!!

解决方案 »

  1.   

    这个问题如果for循环中的运算量比较小是,速度太快了,大家也就不太注意了。
    我想在连续使用进度条是,第二次的步数比第一次多是,是不是都存在这样的情况啊!是不是有什么方法,可以在第二次执行进度条之前,先清空些什么量,或者释放一些内存。我对这个控件不是很熟悉,希望高手给些建议!!
      

  2.   

    SetRange(0, 100)重设,SetPos(0)开始置0...
      

  3.   

    我for中的计算 cpu运行100%。
    是不是这样m_progress1.SetPos()就罢工了啊.呵呵我在for中加了一个MessageBox();跟踪每一次循环。结果不管怎么修改x,不管间隔时间多么短,都是正常显示的!这个时候但弹出一个MessageBox时,让cpu休息一下了! 不知道有没有这样的可能啊!!
      

  4.   

    //可以试试在循环中处理消息,但最好还是在线程计算。while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))   
    {   
      ::TranslateMessage(&msg);   
      ::DispatchMessage(&msg);   
    }