注册 登录
编程论坛 VB6论坛

我怎么竟遇到一些奇怪问题,print 的问题,请讲解。

txxb 发布于 2014-11-12 09:13, 610 次点击
Private Sub Form_Click()
t = Timer
Print "这是第一行,5秒后显示第二行。"
Do While Timer < t + 5
Loop
Print "5秒到,第二行。"
End Sub

请问代码有问题吗?熟悉代码用的。第一行怎么不是立即显示??
8 回复
#2
风吹过b2014-11-12 10:31
Private Sub Form_Click()
t = Timer
Print "这是第一行,5秒后显示第二行。"
DoEvents                              '使用前面调用的慢速操作完成
Do While Timer < t + 5
Loop
Print "5秒到,第二行。"
End Sub
#3
txxb2014-11-12 10:40
它的原理是什么?不是逐条执行吗??谢谢。我想深刻的理解。
#4
txxb2014-11-12 11:21
以下是引用风吹过b在2014-11-12 10:31:54的发言:

Private Sub Form_Click()
t = Timer
Print "这是第一行,5秒后显示第二行。"
DoEvents                              '使用前面调用的慢速操作完成
Do While Timer < t + 5
Loop
Print "5秒到,第二行。"
End Sub

只有本站会员才能查看附件,请 登录

这个图上的程序,怎么没有这个现象?视频教程上截的图。

[ 本帖最后由 txxb 于 2014-11-12 19:35 编辑 ]
#5
风吹过b2014-11-12 13:44
这个就清楚了。也许与调用有关。

在VB里,绘图操作属慢速操作,含 输出文字,画图,贴图,让控件显示文字。
快速操作为:直接写无调用的代码,计算,循环,判断等。

我感觉慢速操作属于另一个线程,慢速操作需要等待快速操作结束后才会执行。
DoEvents  命令就是让 快速操作暂停一下,等待慢速操作完成后再继续。
#6
xzlxzlxzl2014-11-12 15:41
回复 5 楼 风吹过 b
这好像和快慢速无关吧。
应该是和多任务系统有关,得到显示效果是系统任务,你的vb在单线程下老占着系统,系统就不会处理显示结果,Doevents语句就是暂时将线程交给系统,这时系统就会处理当前排着队的任务或消息,包括显示。
#7
txxb2014-11-12 16:59
还是不太理解,什么情况下应该使用DoEvents?
#8
xzlxzlxzl2014-11-12 20:48
回复 7 楼 txxb
一般在一个大循环里需要及时得到系统的输入、输出时,需要使用doevents语句给系统处理的时间。
如果你深刻理会了windows消息处理机制你就会很容易知道什么时候你能控制cpu,什么时候又需要交给操作系统控制cpu了,也许在dos里你能很清楚你的程序执行到哪里了,但在多任务系统下你只能根据事件或消息来取得电脑的控制权,你并不能清楚某一时刻程序执行到哪里,也许大部分时间是在操作系统里循环等待消息或事件发生。
#9
我可不是大神2014-11-14 16:55
撸主,求共享教程
1