两个延时
两种区别是第一种在该程序(线程)延时的过程中,仍然可以去操作该程序的其他功能。
但第二种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。