目前编了一个VB程序涉及5层FOR循环,遇到了一个很奇怪的问题:同样的程序代码,FOR循环18万次用时9个小时左右,而FOR循环5万次用时12小时还没有循环完。请教达人这是怎么回事。FOR循环结构如下:
For k1 = ka1 To ka2 Step sk1
        ka = k1
    For k2 = kb1 To kb2 Step sk2
            kb = k2
        For h1 = ha1 To ha2 Step sh1
                ha = h1
            For h2 = hb1 To hb2 Step sh2
                    hb = h2                    For T= 30 To 70 Step 10                                       Do While                                               程序段(主要是call sub过程)
                                         Loop
                     next T
            next h2
       next h1
   next k2
next k1注:sub过程中要用到参数ka,kb,ha,hb.
高手支招呀,bow.

解决方案 »

  1.   

    不需要的,循环变量的上下界限有差别,所以循环次数相应有差别。准确的说是同样的程序代码,FOR循环控制变量变化范围不一样或者说相当于两个程序,但执行的代码内容是一致的,只是循环控制变量的范围有差别。但现在奇怪的是18万次只需9个小时左右,而5万次循环运行13个小时还在运行,这样的话相当于FOR循环还没有结束。我的理解循环次数少运行时间应该短才对,差别在于18万次是首先运行的,运行完后再继续运行5万次情况的,这中间电脑没有停止,不知道这是否有影响。
      

  2.   

    你确定它们还在循环?如果没编译,ctrl+break 中断下看看它们还在工作没?
      

  3.   

    ctrl+break没有问题,怎么判断是否还在工作?
      

  4.   

    FOR循环18万次用时9个小时左右,而FOR循环5万次用时12小时还没有循环完。5万次应该在3小时完成(9/18) 很显然程序没在跑(已死机或死循环了)问题很有可能是你没宣告那几个变量 并且没宣告为Long
      

  5.   

    加个me.caption= ??? 不就可以看到过程了吗?
      

  6.   

    10楼,我是新手,你所讲的宣告变量,“并且没宣告为Long”不知道是什么意思?死循环的话,我的理解应该可以排除,因为我18万次的FOR循环与5万次的FOR循环程序的差别只有循环控制变量的范围有差别,也就是循环次数上有差别,其余的代码及程序结构是完全一致的。所以觉得所遇到的这个问题比较奇怪,不好理解。
      

  7.   


    就凭你上面这句话...... Long是长整型数值, 其它为何要宣告 自己百度后你知道的会更多.Do While  
      程序段(主要是call sub过程)
    Loop你可能就死在do...loop这里了, 你这个过程是否用到了那几个for循环的变量? 你没在通用区宣告变量能行吗?
      

  8.   

    14楼,子过程过程用到了FOR循环变量,并且已在通用区定义。目前程序18万次的循环已得到了结果,问题是5万次循环时间超过了18万次还没有结果,所以感觉很奇怪。DO WHILE---LOOP循环内设置了跳转语句应该不会有死循环出现的。
      

  9.   

    非编译状态下运行,大概4小时左右按Ctrl+Break中断,F8步进运行几下或者输出各个变量的值看看……你所说的情况,好比一大缸子水都放完了,现在只有半缸水怎么也放不完的意思。蛋疼
      

  10.   

    For k1 = ka1 To ka2 Step sk1
      ka = k1
      For k2 = kb1 To kb2 Step sk2
      kb = k2
      For h1 = ha1 To ha2 Step sh1
      ha = h1
      For h2 = hb1 To hb2 Step sh2
      hb = h2
        me.caption="k1,k2,h1,h2="+CStr(k1)+","++CStr(k2)+","++CStr(h1)+","++CStr(h2)
        me.refresh
        doevents
      For T= 30 To 70 Step 10  Do While    程序段(主要是call sub过程)
      Loop
      next T
      next h2
      next h1
      next k2
    next k1
      

  11.   

    本帖最后由 bcrun 于 2011-01-04 10:15:40 编辑