首页/文章/ 详情

CATVBA中四个延时方法Timer、Sleep、TimeGettime、Adddate函数

2年前浏览3408

我们在做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小蚂蚁
二次开发CATIA控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-08-26
最近编辑:2年前
CATIA专业培训讲师
日拱一卒无有进 功不唐捐终入海
获赞 37粉丝 128文章 64课程 4
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈