哪位大侠推荐一个好的timer吗?不需要从cwnd继承的

解决方案 »

  1.   

    使用定时器并没有开启一个新的线程,即使在OnTimer里面KillTimer了,也一样要执行下面的语句。至于不是从CWnd继承的,::SetTimer()就是阿,只不过多了第一个参数是句柄而已。
      

  2.   

    立即停止计时。继续执行代码。
    API, 
    UINT_PTR SetTimer(      
        HWND hWnd,
        UINT_PTR nIDEvent,
        UINT uElapse,
        TIMERPROC lpTimerFunc
    );
      

  3.   

    嗯,是的,killtimer好像是postmessage,
    有没有什么timer可以立即停止计时,同时立即停止执行代码的呢?如果我的timer在另一个多线程中设置,同时会用到这个线程中的一个类对象,当在这个线程中killtimer后,同时构析了那个类对象,但实际我的timer仍然在继续执行时,就会有问题,怎么解决这个问题呢?
    我用try,和一个事件对象锁定能解决,但有没有更好的办法呢?如果有一个timer的killtimer能立即停止ontimer就好了谢谢
      

  4.   

    winmm库timer对象可以解决这个问题么?但是不是它的timer要求的资源很高啊?它用的是一个高优先级别的线程不停的刷时间
      

  5.   

    是立即将一个Timer杀掉,但是不会将Post到消息队列中的WM_TIMER删除
    删除Timer之后仍然可能收到WM_TIMER消息
      

  6.   

    最简单的设置标志,忽略随后到来的WM_TIMER消息
      

  7.   

    to: xing_xing_xing 
    这个我试过了啊,但我觉得windows没有立即杀掉正在执行的ontimer函数
      

  8.   

    to: xing_xing_xing 
    这个我试过了啊,但我觉得windows没有立即杀掉正在执行的ontimer函数
      

  9.   

    不可能直接杀掉OnTimer
    因为一般OnTimer是由主线程执行的,
    如果杀掉,整个程序就结束了.如果一定要杀掉,执行exit(0);好了.
      

  10.   

    现在我的流程是这样,请大侠们指点,多谢多谢:
    首先给主进程的ontimer加入一个开关,BOOl Csomeclass::IsOutTimer,当ontimer执行开始时设置为False,当ontimer退出前设置为True主进程:定义一个Csomeclass*指针,启动子线程,将Csomeclass*传入子线程: 
    1.定义一个CsomeClass类对象,将主进程传入的CsomeClass*指针指向这个类对象地址,
    2.同时启动主进程的ontimer, 
    3.然后对CsomeClass进行计算
    4.主进程:这时ontimer正用那个CsomeClass指针得到子线程实际计算的结果
    5.正常计算完毕
    6.killtimer
    7.等待Ontimer执行完毕
    while (true)
      {
        if (CsomeClass::IsOutTimer) break;
        ::sleep(50);
      }
    8.退出子线程,同时构析CsomeClass
    但是我总觉得还有更好的方法,比如有人告诉我说,在第7步的::sleep(50)有时会让子线程就这么睡下去,可能永远得不到唤醒,是这样吗,请各位大侠指教,谢谢谢谢谢谢
      

  11.   

    BOOl Csomeclass::IsOutTimer
    执行OnTimer前的初始值是多少?如果为false,
    在OnTimer一次都没有执行的情况下.
    while (true)
    {
      if (CsomeClass::IsOutTimer) break;
      ::sleep(50);
    }
    将成为死循环.
    这个死循环的形成和 ::sleep(50);没有关系.可以考虑将(6)和(7)的顺序交换一下.
      

  12.   

    Csomeclass::IsOutTimer初始化为TRUE
      

  13.   

    我觉得6,7如果换位的话,可能在killtimer前又执行了一个ontimer,那样的话,while的作用就没有起到了阿