现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

vc实现时间延时

2012-08-13 06:13 工业·编程 ⁄ 共 871字 ⁄ 字号 暂无评论

用Sleep函数延时,如何时间太长,程序就像无响应一样,采用消息泵可以解决这个问题

5秒延时

COleDateTime odtStart = COleDateTime::GetCurrentTime();

COleDateTimeSpan odtsEnd = COleDateTime::GetCurrentTime()-odtStart;

while(5>=odtsEnd.GetTotalSeconds())

{

MSG msg;

GetMessage(&msg,NULL,0,0);

TranslateMessage(&msg);

DispatchMessage(&msg);

odtsEnd = COleDateTime::GetCurrentTime()-odtStart;

}

AfxMessageBox(L"5秒之后");

50毫秒延时

这其中也有一些误差

DWORD dwStart = GetTickCount();

DWORD dwEnd = 0;

do

{

MSG msg;

GetMessage(&msg,NULL,0,0);

TranslateMessage(&msg);

DispatchMessage(&msg);

dwEnd = GetTickCount();

} while((dwEnd - dwStart) <= 50);

AfxMessageBox(L"50豪秒之后");

5微秒延时

对于更精确的延时就要用QueryPerformanceCounter函数

LARGE_INTEGER liTemp ;

LONGLONG nStart=0,nEnd=0 ;

double nTemp=0;

QueryPerformanceCounter(&liTemp) ;

nStart = liTemp.QuadPart ;

while (nTemp<5)

{

QueryPerformanceCounter(&liTemp) ;

nEnd = liTemp.QuadPart ;

nTemp=static_cast<double>(nEnd - nStart);

}

AfxMessageBox(L"5微秒之后");

以上程序在VC++2005 UNICODE下调试通过

给我留言

留言无头像?