VC的延时函数问题
在网上摘了个延时函数,如下:但实际运行时有问题的,请各位看看怎么回事
void DelayMs(DWORD dwMs) //延时到毫秒级别
{
DWORD dwBegin,dwEnd;
dwBegin=::GetTickCount();
MSG msg;
do
{
GetMessage(&msg,NULL,0,0);
TranslateMessage(&msg);
DispatchMessage(&msg);
dwEnd=::GetTickCount();
::Sleep(10);
}while((dwEnd-dwBegin)<dwMs);
}
然后我在对话框窗体上添加一个按钮,一个Edit Box控件,对应变量为m_edit,按钮的点击响应程序如下:
CString str;
int i;
for(i=0;i<10;i++)
{
str.Format("%d",i);
m_edit=str;
UpdateData(FALSE);
delay_time(500);
}
结果发现延时有问题了,Edit控件根本就不是按照500ms更新一次,毫无规律,有时需要好几秒才更新一次。。。
但如果把鼠标焦点放在edit控件,则运行又是正常的,这是怎么回事呢?
[解决办法]
把你的GetMessage(&msg,NULL,0,0);换成PeekMessage(&msg, ...,PM_REMOVE);
你完全可以用个线程去计时,在需要的时候给窗口发送自定义的消息即可。
或者使用精度更好的计时器,timeSetEvent