两个延时

两种区别是第一种在该程序(线程)延时的过程中,仍然可以去操作该程序的其他功能。

但第二种sleep就是在这段时间不能进行该程序的其他操作。就好像该程序死了一样。(时间短的话看不出来,但sleep一分钟就很明显了

1.方式一:VC中的WM_TIMER消息映射能进行简单的时间控制。首先调用函数SetTimer()设置定时间隔,如SetTimer(0,200,NULL)即为设置200ms的时间间隔。然后在应用程序中增加定时响应函数 OnTimer(),并在该函数中添加响应的处理语句,用来完成到达定时时间的操作。这种定时方法非常简单,可以实现一定的定时功能,但其定时功能如同Sleep()函数的延时功能一样,精度非常低,最小计时精度仅为30ms,CPU占用低,且定时器消息在多任务操作系统中的优先级很低,不能得到及时响应,往往不能满足实时控制环境下的应用。只可以用来实现诸如位图的动态显示等对定时精度要求不高的情况。如示例工程中的Timer1。

void CMainFrame::Delay(int ms)
{
   m_bIsTimer = true;
   int nTimer;
   nTimer = SetTimer(2,ms,NULL);
   while(m_bIsTimer)
  { 
     MSG message;
     if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
    {
        ::TranslateMessage(&message);
       ::DispatchMessage(&message);
    }  
  }
}

void CMainFrame::OnTimer(UINT_PTR nIDEvent)
{

   switch(nIDEvent)
   {
    case 2:
     {
        m_bIsTimer = false;
        KillTimer(2); 
      }
     break;
    } 

   CMDIFrameWndEx::OnTimer(nIDEvent);
}

2.方式二:VC中使用sleep()函数实现延时,它的单位是ms,如延时2秒,用sleep(2000)。精度非常低,最小计时精度仅为30ms,用sleep函数的不利处在于延时期间不能处理其他的消息,如果时间太长,就好象死机一样,CPU占用率非常高,只能用于要求不高的延时程序中。如示例工程中的Timer2。

posted on 2011-02-22 16:32  kyleada  阅读(296)  评论(0编辑  收藏  举报

导航