由于settimer是发送定时消息来实现定时功能,这个消息的优选级比较低,经常在程序忙的时候,定时器不动了,所以我用timesetevent函数来实现定时功能,现在发现一个问题,我想和大家探讨下TimeSetEvent里面提供了一个回调函数来让用户使用,我在回调函数里写上代码
callback TimeProc(....)
{
::SendMessage(hwnd,....)
}然后在窗体里获取发送来的消息,做一些工作,
OnMessage
{function();
}我现在设置定时器为10秒钟触发一次,然后,我的function()函数需要10秒中来完成工作。我想象中应该是function工作完毕后,过10秒才会再次收到消息,因为我用的是SendMessage,在没有返回前,定时器的线程应该是阻塞在那里的。可实际上,function在工作完毕后,不用等10秒,马上就会接收到下一个消息,这样function就变成连续工作了,没有达到我的定时工作的目的请问为何会这样?

解决方案 »

  1.   

    function就是个弹出个窗口,让消息阻塞在那里,然后10秒后,用户点击确定,关闭窗口
      

  2.   

    function不能是窗口,窗口本身有消息循环。
      

  3.   

    我是做个测试,和function无关
      

  4.   

    fuEvent参数你怎么填的?ME_ONESHOT ----One shot 时间发生,一旦经过uDelay毫秒时间.
    TIME_PERIODIC ----periodic 每过uDelay 毫秒事件发生一次
      

  5.   

    TIME_PERIODIC
     我是周期性的触发
      

  6.   

    1.那个函数多贴点内容出来啊看看2.另外,你断点到执行函数,看看call stack
      

  7.   

    这跟代码无关,就是我说的那个意思不是代码的问题,是timesetevent函数的机制问题我已经解决了,结贴
      

  8.   

    可以在SendMessage前timeKillEvent
    后再timeSetEvent