游戏开发论坛

 找回密码
 立即注册
搜索
楼主: reity

关于vb延时的问题

[复制链接]

41

主题

242

帖子

273

积分

中级会员

Rank: 3Rank: 3

积分
273
 楼主| 发表于 2007-8-6 18:42:00 | 显示全部楼层

Re:关于vb延时的问题

谢谢大兵潜?焱Я耍?灰?芙饩鑫侍猓?++代码一样照吃不误。
虽说不用c++做游戏,不过还是需要看得懂c才行的。

41

主题

242

帖子

273

积分

中级会员

Rank: 3Rank: 3

积分
273
 楼主| 发表于 2007-8-6 19:06:00 | 显示全部楼层

Re:关于vb延时的问题

自己写了段代码,好像还是不行,大家看看。
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Declare Function timeGetTime Lib "winmm.dll" () As Long

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Type TIMECAPS
  min As Long
  max As Long
End Type

Private Declare Function timeGetDevCaps Lib "winmm" (ByRef ptc As TIMECAPS, ByVal cbtc As Long) As Long
Private Declare Function timeBeginPeriod Lib "winmm" (ByVal uPeriod As Long) As Long
Private Declare Function timeEndPeriod Lib "winmm" (ByVal uPeriod As Long) As Long


Private Sub Command1_Click()
Dim i As Long
Dim j As Long
Dim a As TIMECAPS
Dim c%, d%, e%
c = timeGetDevCaps(a, 8)
d = timeBeginPeriod(1)
e = timeEndPeriod(1)
Me.Cls
i = GetTickCount
j = timeGetTime
Sleep 1
i = GetTickCount - i
j = timeGetTime - j
Print i
Print j
Print a.max
Print a.min
Print c
Print d
Print e
End Sub

结果:
15
15
1000000
1
0
0
0
搞笑的是,一旦浏览网页,结果变为:
0
2
1000000
1
0
0
0
真是奇妙,会不会是优先级的问题?

41

主题

242

帖子

273

积分

中级会员

Rank: 3Rank: 3

积分
273
 楼主| 发表于 2007-8-6 19:36:00 | 显示全部楼层

Re:关于vb延时的问题

特别感谢psic,高手就是高手,建议非常好,非常实用!谢谢!

0

主题

25

帖子

25

积分

注册会员

Rank: 2

积分
25
发表于 2007-8-6 22:22:00 | 显示全部楼层

Re:关于vb延时的问题

我是这样:
Private Sub Command1_Click()
    Dim i As Long
    Dim j As Long
    Dim a As TIMECAPS
    Dim c%, d%, e%
    c = timeGetDevCaps(a, 8)
    d = timeBeginPeriod(a.min)
    Me.Cls
    i = GetTickCount
    j = timeGetTime
    Sleep 1
    i = GetTickCount - i
    j = timeGetTime - j
    e = timeEndPeriod(a.min)

    Print i
    Print j
End Sub

结果:
15
1
有时会是:
0
2
0应该是因为GetTickCount精度不高,timeBeginPeriod设置精度影响不了它,但能影响Sleep(貌似有还有一点点误差)

87

主题

790

帖子

806

积分

高级会员

Rank: 4

积分
806
QQ
发表于 2007-8-7 00:12:00 | 显示全部楼层

Re:关于vb延时的问题

我的游戏不用延时函数

Do
    OldTickCount = GetTickCount
    处理其它事过程
    Do While GetTickCount - OldTickCount < 毫秒数
        DoEvents
    Loop
Loop

41

主题

242

帖子

273

积分

中级会员

Rank: 3Rank: 3

积分
273
 楼主| 发表于 2007-8-7 08:07:00 | 显示全部楼层

Re: Re:关于vb延时的问题

[quote]
[b]陈?: Re:关于vb延时的问题[/b]

我的游戏不用延时函数

Do
    OldTickCount = GetTickCount
    处理其它事过程
    Do While GetTic...
[/quote]
玩一会儿,你就会发现风扇转飞了。

41

主题

242

帖子

273

积分

中级会员

Rank: 3Rank: 3

积分
273
 楼主| 发表于 2007-8-7 08:13:00 | 显示全部楼层

Re: Re:关于vb延时的问题

大兵潜?焱? Re:关于vb延时的问题

我是这样:
Private Sub Command1_Click()
    Dim i As Long
    Dim j As Long
    Dim a As TIMECAP...


不行啊,直接复制了也没有效果。
你试试把所有网页关了在运行。
我这里开着网页是0,2,关上网页是16,16。

0

主题

25

帖子

25

积分

注册会员

Rank: 2

积分
25
发表于 2007-8-7 13:16:00 | 显示全部楼层

Re:关于vb延时的问题

嗯,我倒是还开着wmp,所以关了wmp以后才有了问题……

不过,我试着将
timeBeginPeriod放入Form_Load,timeEndPeriod放入Form_Unload,在仅开VB的情况下正常通过了,不知在你那里运行如何?

Dim a As TIMECAPS

Private Sub Command1_Click()
    Dim i As Long
    Dim j As Long
    Me.Cls

    i = GetTickCount
    j = timeGetTime
    Sleep 1
    i = GetTickCount - i
    j = timeGetTime - j

    Print i
    Print j
End Sub

Private Sub Form_Load()
    timeGetDevCaps a, 8
    timeBeginPeriod a.min
End Sub

Private Sub Form_Unload(Cancel As Integer)
    timeEndPeriod a.min
End Sub

87

主题

790

帖子

806

积分

高级会员

Rank: 4

积分
806
QQ
发表于 2007-8-7 14:24:00 | 显示全部楼层

Re: Re: Re:关于vb延时的问题

reity: Re: Re:关于vb延时的问题


玩一会儿,你就会发现风扇转飞了。

为什么

1

主题

102

帖子

108

积分

注册会员

Rank: 2

积分
108
QQ
发表于 2007-8-7 20:11:00 | 显示全部楼层

Re:关于vb延时的问题

CPU 占用率100%,电流太大—〉太热,元件易老化,浪费资源,不符合可持续发展,呵呵……
同样会影响到周边 风扇或者其他的
我这个风扇就是一些游戏害的……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 11:47

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表