| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1654 人关注过本帖
标题:能帮我看看这个VB编的程序,有点问题,运行速度特慢
只看楼主 加入收藏
debugme
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-1-26
收藏
 问题点数:0 回复次数:9 
能帮我看看这个VB编的程序,有点问题,运行速度特慢

能帮我看看这个VB编的程序,有点问题,运行速度特慢
for k=0 to 5
sleep(1000)
Label1.Caption = Int(Rnd * 10)
sleep(1000)
Label2.Caption = Int(Rnd * 10)
sleep(1000)
Label3.Caption = Int(Rnd * 10)
Next k
以上是我用三个label来显示3个随机数的跳变,总共要跳变5次,每隔0.5秒显示一次,但是整个过程中(我查看了一下CPU,VB高达98%)根本看不到数字在跳变,只有在每5次结束后,才显示最后一次的数字!!!
但是在单步执行的时候又可以看到跳变过程(sleep是我调用的API,用于延时0.5秒的)
整个源码如附件所示 
请高人指点


搜索更多相关主题的帖子: Rnd 速度 Int sleep 
2007-01-26 19:40
debugme
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-1-26
收藏
得分:0 
[求助]能帮我看看这个VB编的程序,有点问题,运行速度特慢
能帮我看看这个VB编的程序,有点问题,运行速度特慢
for k=0 to 5
sleep(1000)
Label1.Caption = Int(Rnd * 10)
sleep(1000)
Label2.Caption = Int(Rnd * 10)
sleep(1000)
Label3.Caption = Int(Rnd * 10)
Next k
以上是我用三个label来显示3个随机数的跳变,总共要跳变5次,每隔0.5秒显示一次,但是整个过程中(我查看了一下CPU,VB高达98%)根本看不到数字在跳变,只有在每5次结束后,才显示最后一次的数字!!!
但是在单步执行的时候又可以看到跳变过程(sleep是我调用的API,用于延时0.5秒的)
整个源码如附件所示 
请高人指点
b0f49TOa.rar (47.8 KB) 能帮我看看这个VB编的程序,有点问题,运行速度特慢


2007-01-26 19:42
jmasm
Rank: 1
等 级:新手上路
威 望:1
帖 子:368
专家分:0
注 册:2006-9-24
收藏
得分:0 
能帮我看看这个VB编的程序,有点问题,运行速度特慢
sleep(1000)
你的for中每次要执行三次sleep(1000)
首先说明1000毫秒是1秒,也就是说每执行一次FOR循环至少3秒
6次就是18秒!!!
怎能不慢呢
2007-01-26 20:35
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
收藏
得分:0 
直接扔给timer控件不要用循环

快上课了……
2007-01-26 20:51
debugme
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-1-26
收藏
得分:0 

sorry,我在描述的时候有点不清,我重述一下
能帮我看看这个VB编的程序,有点问题,运行速度特慢
for k=0 to 5
sleep(1000)
Label1.Caption = Int(Rnd * 10)
Label2.Caption = Int(Rnd * 10)
Label3.Caption = Int(Rnd * 10)
Next k
以上是我用三个label来显示3个随机数的跳变,总共要跳变5次,每隔1秒显示一次(间隔1秒是为了清楚的看到数字跳变的过程),但是整个过程中(我查看了一下CPU,VB高达98%)根本看不到数字在跳变,只有在每5次结束后,才显示最后一次的数字!!!(理论上至少需要5秒)
但是在单步执行的时候又可以看到跳变过程(sleep是我调用的API,用于延时1秒的)

VB运行的速度够快,怎么会使得CPU的占用率那么高呢???而且还类似于卡死的现象
但照我的code运行,为什么CPU的占用率那高呢???
我的code也不复杂呀,不过是sleep了一秒,然后label显示随机数,循环再sleep(即延时)1秒,再显示一个随机数,其中间隔约为一秒,那么运行时应该有数字跳变的情形呀,那为什么会出现像卡死的情形呢,而且只有在运行完了以后,才显示最后一个数字,在过程中的数字一个都没看到显示,非常奇怪


我曾用timer实现过这样的功能,间隔为0.5秒,运行时可以清楚的看到数字的跳变,而且cpu占用率也不高呀
整个源码如附件project.rar所示 
请高人指点

2007-01-27 12:06
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
收藏
得分:0 
是sleep函数的问题.

快上课了……
2007-01-27 12:47
debugme
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-1-26
收藏
得分:0 
我像如下修改了我的code,在sleep后增加了Doevents后,还是一样呀,只显示最后一次的数字
Private Sub Command1_Click()
Dim k As Integer
For k = 0 To 5
Sleep (1000)
DoEvents
Label1.Caption = Int(Rnd * 10)
Label2.Caption = Int(Rnd * 10)
Label3.Caption = Int(Rnd * 10)

Next k
If (Label1.Caption = 7 Or Label2.Caption = 7 Or Label2.Caption = 7) Then
Image1.Visible = True
Beep
End If



End Sub
不过,似乎较以前假死的情形稍微好一点(以前拖动窗体,就反应不过来,现在可以拖动窗体啦),但是仍只显示最后一次数字!!!
请大虾能不能帮我修改一下code,测试好后发给在下看一下,谢谢
2007-01-29 10:38
debugme
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-1-26
收藏
得分:0 
我像如下修改了我的code,在sleep后增加了Doevents后,还是一样呀,只显示最后一次的数字
Private Sub Command1_Click()
Dim k As Integer
For k = 0 To 5
Sleep (1000)
DoEvents
Label1.Caption = Int(Rnd * 10)
Label2.Caption = Int(Rnd * 10)
Label3.Caption = Int(Rnd * 10)

Next k
If (Label1.Caption = 7 Or Label2.Caption = 7 Or Label2.Caption = 7) Then
Image1.Visible = True
Beep
End If



End Sub
不过,似乎较以前假死的情形稍微好一点(以前拖动窗体,就反应不过来,现在可以拖动窗体啦),但是仍只显示最后一次数字!!!
请大虾能不能帮我修改一下code,测试好后发给在下看一下,谢谢
2007-01-29 10:39
dragonfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1024
专家分:0
注 册:2006-3-20
收藏
得分:0 
自己编写一个Delay()函数:
public sub (t as double)'t是延迟的秒数
double nt = timer
while (timer<nt+t)
doevents
wend
end sub

2007-01-29 12:16
slore
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1108
专家分:0
注 册:2005-7-1
收藏
得分:0 
我的意思是sleep函数会定机!加doevents也没用!

直接用timer控件去循环!!

快上课了……
2007-01-29 13:04
快速回复:能帮我看看这个VB编的程序,有点问题,运行速度特慢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025346 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved