我说的不是WM_TIMERCHANGE,也不是WM_TIMER消息,是这样的:
我想当系统时间正好在发生变化时(如分钟或秒钟)得到这样消息,来更改我的一个对象上显示的时间。
比如我显示的时间是精确到分钟的,那么我是没有必要随时随地都去查看时间有没有变化,如果我的时间精确到小时,那我只需要在系统时间正好在变更小时时给我一个消息。有这样的消息吗?

解决方案 »

  1.   

    没有
    要达到你的目的,用SetTimer()就可以了
      

  2.   

    SetTimer不行,比如我的时间精确到每小时更新一次显示,而我是8:30时开时运行了,那么当程序运行到9:00时就应该更新显示,但是他没有,而是在一个小时即9:30时才更新,而在9:01,9:20等等的时候都没有改过来。
    也许你会劝我将SetTimer的时间间隔改小些,但是那样一样会有不精确,只是不精确的程度小些,还有,我不希望频繁的去检查时间。
      

  3.   

    开始我想劝你说没有办法了,只能每秒钟检查一次了。
    突然想出了一个办法。这样吧!
    每当开始运行程序的时候,读取当时的系统时间,设置一个状态变量用来判断是否现在是整点,如果不是,计算出目前到下一次整点需要的时间,然后设置一个SetTimer,它的时间间隔为达到下一次整点的时间;如果是整点的话,则设置SetTimer的时间间隔为1个小时即可。当不是整点的SetTimer计时达到下一次整点的时候,结束它(Kill),开始一个新的以一小时为单位的SetTimer。当然具体的逻辑还需要整理,尤其是状态变量的设置和判断,你还很需要花功夫,我就不替你做了。
      

  4.   

    用WaitableTimer内和对象把,用CreateWaitabelTimer()创建,用SetWaitableTimer()设置周期,然后用WaitForSingleObject()或WaitForMultiObjects()等待定时器对象就行,时间精度较高(毫秒级)