【CATIA二次开发】CATVBA中四个延时方法Timer函数,Sleep函数,TimeGettime函数,Adddate函数

我们在做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



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


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

以上就是在CATVBA中使用延时的四种方法,老铁你学废了吗?


文章来源CATIA小蚂蚁    


登录后免费查看全文
立即登录
默认 最新
当前暂无评论,小编等你评论哦!
点赞 评论 收藏
关注