我从OpenCV的等待函数中改进!
1.可以实现“等待”功能。
2.可以定时。
3.可以处理消息。防止界面卡死。
{
if (delay <= 0)
{
return;
}
//计算当前的毫秒数
int time0 = GetTickCount();
//无限循环
for(;;)
{
MSG message;
//如果等候时间已到 ,则退出函数
if( (delay > 0 && abs((int)(GetTickCount() - time0)) >= delay) )
return ;
else if( PeekMessage(&message, 0, 0, 0, PM_REMOVE) == FALSE ) // 如果没有查询到消息. (非阻塞式函数)
{
Sleep(1); //让渡出线程的时间片,防止CPU居高不下; 等待时间可能很长,不可能让CPU一直处理本函数。该用法很有用。
continue; //继续f无限or循环
}
//派发消息
TranslateMessage(&message);
DispatchMessage(&message);
}
}
PS: 基本上能用。有时候会有问题!
如果应用程序退出的时候,WaitKey还会运行,那么建议给for循环加一个 bWaitFlag
for(;bWaitFlag;) //加一个判断;
bWaitFlag = FALSE; //退出EXE