想做个闹钟功能,当系统时间到一个确定值时,就触发。用timer觉得不是很准确,而且频率设太高又耗资源。不知又没有更好的办法?

解决方案 »

  1.   

    楼上的根本没理解我的意思,timer我会用,我是想问还有别的可替换控件吗?
      

  2.   

    可以用API函數:
    1.GetTickCount
    2.SetTimer,KillTimer
      

  3.   

    在Timer事件里面判断系统时间啊
      

  4.   

    //設置interval屬性為1000﹐即1秒
    可以的啊,
    闹钟没必要精确到1秒以内吧
    //频率设太高又耗资源
    interval=1000的话,耗不了多少资源的,可以忽略不计
      

  5.   

    做闹钟的话Timer足够精确了。除非你想精确计算程序占用CPU的时间,否则没必要用API。
      

  6.   

    用做游戏的方法
    DoEvents
    'Game-Loop
    Do
    Loop While 闹钟响的条件
    闹钟响代码
      

  7.   

    引用:
    CCRP High Performance Timer Objects [VB6.0]我公司很多项目都是使用此控件,直接对硬件时间进行操作。。
      

  8.   

    用控件浪费资源了.别的控件更浪费资源.用API是不是更好呢.有谁给些代码出来...
      

  9.   

    我觉得我用timer做的闹钟,也就是到了有事情要办的时刻就闹,结果,我的时间间隔是根据两个事件相隔事件长短而或大或小,结果它老是出现漏斗晃动。哪位用notestimer的高手能给点指点,谢谢了。在线等待
      

  10.   

    settimer和vb的timer应该完全一样
    看你的时间精度了
    timer触发多每秒18.2次
      

  11.   

    出现漏斗晃动,是不是由于,notestimer在检查有没有新事件的同时,有用户在察看或修改该数据库中的文件呢
      

  12.   

    不知道你要精确到什么程度,我想一个闹钟最多也就要求精确到秒吧?若秒级精度,都不能用Timer控件的话,那就是你使用方法不当引发的问题了。不要用Timer控件计时,那会出现巨大的累计误差的。应该是用Timer事件来检查系统时间或系统累计时间。这种计时的最大误差就是Timer控件interval值,若将interval设为100基本可保证不超过十分之一秒的误差。VB是单线程程序,在单线程中因Timer事件得不到执行而产生的误差,任何API方法也同样是没有的。
      

  13.   

    Option ExplicitPublic lTimerId As Long
    Private Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
    Private Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As LongPrivate Sub TimerProc(ByVal lHwnd As Long, ByVal lMsg As Long, ByVal lTimerId As Long, ByVal lTime As Long)
        '写入你的代码
    End SubPublic Sub StartTimer(lMinute As Long)
        lTimerId = SetTimer(0, 0, lMinute, AddressOf TimerProc)
    End SubPublic Function StopTimer(lTimerId As Long) As Long
        StopTimer = KillTimer(0, lTimerId)
    End Function
      

  14.   

    用 Timer 没问题啊
    Option Explicit
    Private dtEnd As DatePrivate Sub Form_Load()
        dtEnd = DateAdd("n", 1, Now())
        Timer1.Interval = 1000
    End SubPrivate Sub Timer1_Timer()
        If Now() > dtEnd Then
            Timer1.Enabled = False
            MsgBox "时间到了。", vbInformation
        End If
    End Sub