BIM建筑网
更专业的BIM技术学习网站!


BIM问答|CATIA二次开发:CATIA VBA 获取延时较为可行的四个方法

VIP免费下载全站资源
VIP优惠来袭,免费下载全站资料和课程,技术问题可以随时提问;
查看VIP会员

来源:CATIA小蚂蚁

BIM问答|CATIA二次开发:CATIA VBA 获取延时较为可行的四个方法

我们在做CATIA 二次开发的时候,有的情况下需要暂停程序运行,让CATIA飞一会。

那么,CATIA VBA 获取延时较为可行的四个方法:

1、一般延时 Timer函数(计时单位为秒级,1代表1s)

一个应用接口需要限制运行速度,需要在循环中加个延时函数,这个延时不需要多么精确,要求有个几秒延时,网上用的比较多的就是用Timer函数编写,也是在VB联机手册中所推荐的Timer是VBA自带的函数,用起来比较方便,一般程序如下:

Sub delay(T As Single)

Dim time1 As Single

time1 = Timer

Do While Timer – time1 < T

DoEvents '转让控制权,以便让操作系统处理其它的事件

Loop

Debug.Print ("运行结束,总计耗时为:" & Timer – time1 & "s")

End Sub

Sub calculate1_time()

delay (1.5)

End Sub

BIM问答|CATIA二次开发:CATIA VBA 获取延时较为可行的四个方法

2、精确延时–sleep函数(计时单位为毫秒级,1000代表1s)

精确延时可以用sleep函数,sleep函数是Windows API函数,使用前必须声明,然后使用:

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

延时-Sleep函数,主要功能就是使当前线程等待?段时间,?法就是“Sleep 毫秒数”,这?的毫秒数可以设置成任意整型数据。如Sleep 1000,表?延时1秒(1000毫秒)。Sleep与DoEvents之间是有点区别的。DoEvents其实是将CPU的控制权交出去,是为了在长循环中进程占据全部CPU资源,也就是相当于?种事件,?上有这样的说法:DoEvents就是把机会让给别的事件,??暂时休息?下,但是占着的位置不会空出来。在死循环?放个DoEvents,CPU占?率是100%,同时这个进程还是可以做别的事情的。?Sleep前?也讲过了,就是使当前线程等待?段时间的,英?单词表?上理解也可以理解成“睡觉”的意思,也就是什么都不做了,也不会占着CPU资源的,当然进程也是什么事都不?的,也就是将程序挂起,使操作系统暂时不会响应任何用户操作.一般程序如下:

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub calculate2_time()

Dim d As Date

d = Time()

Sleep 3000 '延时3秒

Debug.Print ("运行结束,总计耗时" & DateDiff("s", d, Time()) & "s")

End Sub

3、精确延时–timeGetTime函数(这里和上面的sleep一样需要声明,计时单位为毫秒级,1000代表1s)

更好的办法是使用timeGetTime函数,timeGetTime函数返回的是开机到现在的毫秒数,可以支持1毫秒的间隔时间,而且永远增加,不存在回头的问题。当然不是永远不回头,毕竟Long型变量(双字,4字节)也是有取值范围的,这个值在0到2^32之间。大约49.71天。

同sleep函数一样,timeGetTime函数是Windows API函数,使用前必须先声明,即:

Private Declare Function timeGetTime Lib "winmm.dll" () As Long

延时函数和方法1一样,只是将Timer函数换成timeGetTime:

注意:延时时间单位是毫秒。由于延时函数中使用了 DoEvents语句交出了系统控制权,所以不会影响用户的其它操作。

Private Declare PtrSafe Function timeGetTime Lib "winmm.dll" () As Long

Sub delay(T As Long)

Dim time1 As Long

time1 = timeGetTime

Do

DoEvents '转让控制权,以便让操作系统处理其它的事件

Loop While timeGetTime – time1 < T

End Sub

Sub ce_time()

Dim d As Date

d = Time()

Call delay(1000) '调用函数 可以使用call,也可以不使用

Debug.Print ("运行结束,总计耗时为:" & DateDiff("s", d, Time()) & "s")

End Sub

BIM问答|CATIA二次开发:CATIA VBA 获取延时较为可行的四个方法

4,一种巧妙的用法,使用vba自带dateadd 函数(计时单位是秒级,1代表1s)

函数表达式是:DateAdd(interval, number, date)

Public Sub BKWait(HowManySecs)

'pause for HowManySecs seconds

Dim EndWait

EndWait = DateAdd("s", HowManySecs, Now)

While Now < EndWait

'this is dummy text…nothing is actually done during the wait

Wend

End Sub

Sub calculate4()

BKWait (5)

End Sub

微信公众号:xuebim
关注建筑行业BIM发展、研究建筑新技术,汇集建筑前沿信息!
← 微信扫一扫,关注我们+
赞(0) 打赏
BIM建筑网 » BIM问答|CATIA二次开发:CATIA VBA 获取延时较为可行的四个方法
100套内部BIM资料,限时领!
付费搞来的,大家都在学!
领取资料 AI解答

评论 抢沙发

评论前必须登录!

 

BIM建筑网,更专业的BIM技术学习网站!

关注建筑新动态,分享建筑新技术

联系我们关于BIM建筑网

觉得文章有用就打赏一下小编吧

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

扫码登录

微信「关注」,快捷登录
扫码关注后会自动登录
注册登录代表您已同意《用户许可协议》
账号登录 | 其他登录

|登录

找回密码

|账号登录注册