六个100ms定时器,要求能够同时计时互不影响,用SetTimer(TIMER[t],100,NULL)和OnTimer(UINT nIDEvent)不能够实现,是消息阻塞吗?有什么解决的方法?看到有大虾提到timeSetEvent、GetTickCount,可以吗?

解决方案 »

  1.   

    本来就是同时计时呀.
    用的时候
    OnTimer(UINT nIDEvent)
    {
    //在这里判断nIDEvent
    if( nIDEvent==TIMER[0])//第一个定时器
    else if( nIDEvent==TIMER[1])//第二个定时器
    //.etc
    }
      

  2.   

    WM_TIMER属于优先级最低的消息了,无法精确计时.
      

  3.   

    肯定可以同时计时,只要ID各不相同。 但是100MS不会很精确。 因为系统的计时单位大约在15~18ms之间。且WM_TIMER消息也不会很及时响应到
      

  4.   

    SetTimer的定时精度在55ms
    还要六个?不知道做什么需要这么多定时器。
    但肯定程序的思路有改进的余地
      

  5.   

    SetTimer的定时精度在55ms
    ========================
    因为系统的计时单位大约在15~18ms之间。
    ===================================定时精度和所用的操作系统有关.95、98、nt等是不同的。
      

  6.   

    谢谢大家
    现在问题是我单步调试程序没问题,可是运行就没有正确的结果也不想是死机。
    除了CWND类负责界面,还建了一个全局工作者线程执行后台任务,当线程里加入Sleep(1500)
    后就有正常反应了,去掉或是将睡眠时间缩短都不可以,不知道为什么?代码如下:
    UINT RunProc( LPVOID pParam )
    {        ……
    while(!isrun)
    {
        Sleep(1);     
        if(!len)
    m_cmd=cmd;
    len=m_cmd.GetLength();
        while(len>0)   
    {
        Sleep(1500);//问题!!
        cmd_top=m_cmd.Left(m_cmd.Find('\r'));
                           …… 
                       }