VB程序运行时很卡出现无响应,怎么办?
do..loop循环中有较大计算量,里面套的for循环循环次数也多达几千次,有读取文件,计算插值,刷新msflexgird1表格。程序运行后,表面上很卡,用鼠标点击程序界...
do..loop循环中有较大计算量,里面套的for循环循环次数也多达几千次,有读取文件,计算插值,刷新msflexgird1表格。程序运行后,表面上很卡,用鼠标点击程序界面,就出现无响应。电脑很好,4核处理器,VB运行时,电脑不卡运行其他程序流畅的,就是VB程序本身卡,但是能顺利计算完毕的。
请问如何让程序比较流畅地运行呢?用For i = 1 To 10
Sleep 1
DoEvents
Next让程序等10ms,但是循环很多,每次等10ms休息一下,10000次循环要耗100s。
不用sleep 1,直接在do....loop循环和for循环中用一个doevents命令么? 这是让计算停顿多久? 不好意思,我是新手!
big_buddy等高手,我已经加了几个doevents,程序出现无响应的情况少了些。但是text和labe.caption的显示却有了问题。
Do while ()
for i=1 to 10000
调用插值函数
Next
Form3.RichTextBox1.Text = ""
For i = 1 To 10000
Form3.RichTextBox1.Text = Form3.RichTextBox1.Text & Wei2(i) & Chr(13) + Chr(10)
DoEvents
Next
......
For i = 1 To 10000
.......对数运算
Next
调用 Simulation函数
label4.caption=.....
For i = 1 To 10
Sleep 1
DoEvents
Next
label1(6).caption=.....
label1(0).caption=....
Loop
运行后鼠标总是在指针状态和忙状态之间不停闪烁,而且label不能显示了,只能到最后运行完显示。以前虽然程序假死,但是在几次大循环运行后,能让label显示让我知道程序计算情况。
我看了些资料,说是外部显示刷新需要时间,vb内部运行又很快,需要靠doevents调节,我是不是用的不恰当。请指点! 展开
请问如何让程序比较流畅地运行呢?用For i = 1 To 10
Sleep 1
DoEvents
Next让程序等10ms,但是循环很多,每次等10ms休息一下,10000次循环要耗100s。
不用sleep 1,直接在do....loop循环和for循环中用一个doevents命令么? 这是让计算停顿多久? 不好意思,我是新手!
big_buddy等高手,我已经加了几个doevents,程序出现无响应的情况少了些。但是text和labe.caption的显示却有了问题。
Do while ()
for i=1 to 10000
调用插值函数
Next
Form3.RichTextBox1.Text = ""
For i = 1 To 10000
Form3.RichTextBox1.Text = Form3.RichTextBox1.Text & Wei2(i) & Chr(13) + Chr(10)
DoEvents
Next
......
For i = 1 To 10000
.......对数运算
Next
调用 Simulation函数
label4.caption=.....
For i = 1 To 10
Sleep 1
DoEvents
Next
label1(6).caption=.....
label1(0).caption=....
Loop
运行后鼠标总是在指针状态和忙状态之间不停闪烁,而且label不能显示了,只能到最后运行完显示。以前虽然程序假死,但是在几次大循环运行后,能让label显示让我知道程序计算情况。
我看了些资料,说是外部显示刷新需要时间,vb内部运行又很快,需要靠doevents调节,我是不是用的不恰当。请指点! 展开
5个回答
展开全部
这里不需要sleep,在循环中加入doevents就好了。若没有添加doevents,运行时就会出现无响应的状态,如果要此时要退出运行,按ctrl+break
补充:
不知道你的语句是怎样的,一般来说,如果是嵌套的循环,则只需要在内部的循环中添加DoEvents就可以了,但是如果嵌套的内循环是选择性的循环,则在外循环里也添加一个比较好。
例如:
for i=1 to 100000
for j=1 to 1000000
....
DoEvents
next
next
这里因为内循环不是选择性的,所以添加一个DoEvents即可;
又例如:
for i=1 to 100000
do while i>50000
....
DoEvents
loop
DoEvents
next
因为这里内循环是根据条件是否满足而执行的,因此为了避免出现资源占用率较高的情况,则在两个循环中都添加为宜。
这里怎么用DoEvents要看你的语句而定。
个人见解,抛砖引玉,仅供参考~~~
补充:
不知道你的语句是怎样的,一般来说,如果是嵌套的循环,则只需要在内部的循环中添加DoEvents就可以了,但是如果嵌套的内循环是选择性的循环,则在外循环里也添加一个比较好。
例如:
for i=1 to 100000
for j=1 to 1000000
....
DoEvents
next
next
这里因为内循环不是选择性的,所以添加一个DoEvents即可;
又例如:
for i=1 to 100000
do while i>50000
....
DoEvents
loop
DoEvents
next
因为这里内循环是根据条件是否满足而执行的,因此为了避免出现资源占用率较高的情况,则在两个循环中都添加为宜。
这里怎么用DoEvents要看你的语句而定。
个人见解,抛砖引玉,仅供参考~~~
展开全部
我以前也碰到过类似问题,我用一个笨方法:在耗时较大的循环中加入
For i = 1 To 1000 '适当调整to后的值,即是交出足够的时间给系统做出反应。不过会影响到程序运行的速度。
DoEvents
Next
For i = 1 To 1000 '适当调整to后的值,即是交出足够的时间给系统做出反应。不过会影响到程序运行的速度。
DoEvents
Next
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
多些 DoEvents
少些 Sleep
就好了!
少些 Sleep
就好了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
下载最新vb
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
顶~~~big_bubby
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询