比如在Timer为300ms
在timer事件中再加API的延时300ms
那总执行一次timer的时间为多长时间?

解决方案 »

  1.   

    Timer300ms + API的延时300ms + 程序执行n毫秒 + 其他程序运行时间
      

  2.   

    >600ms
    Option Explicit
        Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Private Sub Command1_Click()
        Print Timer
        Timer1.Enabled = True
    End SubPrivate Sub Form_Load()
        Timer1.Enabled = False
        Timer1.Interval = 300
    End SubPrivate Sub Timer1_Timer()
        Print Timer
        Sleep (300)
        Print Timer
        'Timer1.Enabled = False
    End Sub
      

  3.   

    一般不会这样用,既然是定时触发,就让Timer程序定时触发好了,便于控制。
    比如,楼上的,还不如干脆让Timer1.Interval = 600好了,这样才便于精确控制Timer程序的运作。
      

  4.   

    接楼上:还有,如果在Timer中用了类似Sleep的延时,比如绘图bitblt操作,会导致图像未绘制完毕,就又执行了Timer程序,这样会占用系统很多时间,严重的会导致死机。
      

  5.   

    不是的,有些情况,在timer1中还是会用到sleep.比如在做一个I/O板卡接收触点状态的程序,因为I/O板的驱动里没有实时接收的功能。
    只能通过Timer来捉取状态
    而在捉取过程,有可能要在Timer中再加点延时来处理其它事情,我也遇到过.
      

  6.   

    借lz的帖子问个曾经有人问过的问题:
    假设在timer有个死循环 那么在timer时间用完后 这个死循环会中断吗?
    Private Sub Form_load()
    Timer1.Interval=300
    End Sub
    Private Sub Timer1_timer()
    Do While Run_Flag=True
    DoEvents
    Loop
    End sub
      

  7.   

    给段代码试验,所谓死循环仍可终止,似乎受DoEvents语句影响而交出控制权.
    Option Explicit
        Dim Run_Flag As Boolean
    Private Sub Form_load()
        Timer1.Interval = 300
    End Sub
    Private Sub Timer1_timer()
        Print Run_Flag
        Do While Run_Flag = True
            DoEvents
        Loop
        Print Run_Flag
        Timer1.Enabled = False
    End Sub
      

  8.   

    如果去掉DoEvents会退出循环吗?
      

  9.   

    去掉DoEvents仍能退出循环。Option Explicit
        Dim Run_Flag As Boolean
    Private Sub Form_load()
        Timer1.Interval = 300
    End Sub
    Private Sub Timer1_timer()
        Print Run_Flag
        Do While Run_Flag = True
            'DoEvents
        Loop
        Print Run_Flag
        Timer1.Enabled = False
    End Sub
      

  10.   

    你仔细看SDK,肯定有事件触发方式的.一般来说有回调,发消息的方式.
      

  11.   

    我发现凌华的PCI-16p1r这块卡的SDK偏偏没有,一定要timer去读端口状态才行
      

  12.   

    不要一下就睡300毫秒,
    for i=1 to 100
    doevents
    sleep 1
    next i
    这样即不卡,又实现了延时