VB FOR循环怪问题

crazybbgs 2011-01-01 08:22:31
目前编了一个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.
...全文
460 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
crazybbgs 2011-01-03
  • 打赏
  • 举报
回复
20楼,后来问题是怎么解决的呢?
嗷嗷叫的老马 2011-01-03
  • 打赏
  • 举报
回复
.....有点晕.

确认循环次数木有问题?
神马都能聊 2011-01-03
  • 打赏
  • 举报
回复
蛋定,我曾经也以为"粗心"很奇怪很难以理解
  • 打赏
  • 举报
回复
非编译状态下运行,大概4小时左右按Ctrl+Break中断,F8步进运行几下或者输出各个变量的值看看……

你所说的情况,好比一大缸子水都放完了,现在只有半缸水怎么也放不完的意思。蛋疼
crazybbgs 2011-01-02
  • 打赏
  • 举报
回复
14楼,子过程过程用到了FOR循环变量,并且已在通用区定义。目前程序18万次的循环已得到了结果,问题是5万次循环时间超过了18万次还没有结果,所以感觉很奇怪。DO WHILE---LOOP循环内设置了跳转语句应该不会有死循环出现的。
cbm6666 2011-01-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 crazybbgs 的回复:]
10楼,我是新手,你所讲的宣告变量,“并且没宣告为Long”不知道是什么意思?
[/Quote]

就凭你上面这句话...... Long是长整型数值, 其它为何要宣告 自己百度后你知道的会更多.

Do While
程序段(主要是call sub过程)
Loop

你可能就死在do...loop这里了, 你这个过程是否用到了那几个for循环的变量? 你没在通用区宣告变量能行吗?
crazybbgs 2011-01-02
  • 打赏
  • 举报
回复
10楼,我是新手,你所讲的宣告变量,“并且没宣告为Long”不知道是什么意思?死循环的话,我的理解应该可以排除,因为我18万次的FOR循环与5万次的FOR循环程序的差别只有循环控制变量的范围有差别,也就是循环次数上有差别,其余的代码及程序结构是完全一致的。所以觉得所遇到的这个问题比较奇怪,不好理解。
cbm6666 2011-01-02
  • 打赏
  • 举报
回复
加个me.caption= ??? 不就可以看到过程了吗?
贝隆 2011-01-02
  • 打赏
  • 举报
回复
这个问题不好说,可否优化代码?
cbm6666 2011-01-02
  • 打赏
  • 举报
回复
FOR循环18万次用时9个小时左右,而FOR循环5万次用时12小时还没有循环完。

5万次应该在3小时完成(9/18) 很显然程序没在跑(已死机或死循环了)

问题很有可能是你没宣告那几个变量 并且没宣告为Long
crazybbgs 2011-01-02
  • 打赏
  • 举报
回复
8楼,18万次的搞定了有结果,但是5万次的搞不定,循环时间超过18万次的但程序还在运行,没有得到结果,真是很难理解。高手支招呀。
choovy123 2011-01-02
  • 打赏
  • 举报
回复
楼主的前面18万次还没搞定
就做后面的5万次的吧??
crazybbgs 2011-01-02
  • 打赏
  • 举报
回复
如6楼所说,不知道是什么原因,感觉很奇怪。
tempms 2011-01-02
  • 打赏
  • 举报
回复
未响应进程,过了段时间又继续运行
crazybbgs 2011-01-02
  • 打赏
  • 举报
回复

For k1 = ka1 To ka2 Step sk1
DoEvents
ka = k1
For k2 = kb1 To kb2 Step sk2
DoEvents
kb = k2
For h1 = ha1 To ha2 Step sh1
DoEvents
ha = h1
For h2 = hb1 To hb2 Step sh2
DoEvents
hb = h2

For T = 30 To 70 Step 10
DO WHILE
CALL SUB
NEXT T
NEXT h2
next h1
next k2
next k1
18楼,目前程序中已应用DOEVENTS函数,与你的稍有差别。但想想加DOEVENTS函数已否似乎不影响ka,kb,ha,hb取值的,DOEVENTS函数的功用到底体现在什么地方有点迷糊。另外,ME项是否仅是为了考察程序是否仍在运行而设的,那还是有其他什么功能。
赵4老师 2011-01-02
  • 打赏
  • 举报
回复
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
crazybbgs 2011-01-02
  • 打赏
  • 举报
回复
16楼,太形象了,就是这么个情况,更准确的说是两个空缸,1个是一满缸水,1个是半缸水,两个缸上开同样大小的孔,满缸的水放完了,半缸的水怎么也放不完。真是蛋疼到家了。
crazybbgs 2011-01-01
  • 打赏
  • 举报
回复
ctrl+break没有问题,怎么判断是否还在工作?
  • 打赏
  • 举报
回复
你确定它们还在循环?如果没编译,ctrl+break 中断下看看它们还在工作没?
crazybbgs 2011-01-01
  • 打赏
  • 举报
回复
不需要的,循环变量的上下界限有差别,所以循环次数相应有差别。准确的说是同样的程序代码,FOR循环控制变量变化范围不一样或者说相当于两个程序,但执行的代码内容是一致的,只是循环控制变量的范围有差别。但现在奇怪的是18万次只需9个小时左右,而5万次循环运行13个小时还在运行,这样的话相当于FOR循环还没有结束。我的理解循环次数少运行时间应该短才对,差别在于18万次是首先运行的,运行完后再继续运行5万次情况的,这中间电脑没有停止,不知道这是否有影响。
加载更多回复(2)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧