vc开发的对话框程序运行后,必须滑动鼠标才能不断的刷新数据列表

最近开发了一个小程序,有一个奇怪的现象,有一个edit control里面显示串口接收的数据字符串,点击一个按钮,会发送一个命令然后等待500ms,再发下一个命令,这样发送共5个命令,每发一个命令,串口连接的设备会立即返回响应信息;

edit control会实时刷新显示发送和接收的数据;但实际表现是必须动一下鼠标,然后才能发送一个命令,然后把命令和反馈都显示出来。

后来找了半天,才发现问题所在:是延迟等待函数的问题。等待500ms是自己写的一个函数,里面用一个循环,不断判断消耗的时间是否达到500ms,循环体内,为了避免死循环导致的界面假死,把接收和处理消息的函数加进去。

void delay_ms(DWORD msec)void delay_ms(DWORD msec){ DWORD dwStart = GetTickCount(); DWORD dwEnd = 0; do { MSG msg;  GetMessage(&msg,NULL,0,0);  TranslateMessage(&msg);  DispatchMessage(&msg);  dwEnd = GetTickCount();  } while((dwEnd – dwStart) <= msec); }

如果界面没有操作,没有产生消息,就会阻塞到GetMessage这里,也就没办法执行后续的操作了。

当时为了快速实现功能,我没有对整个流程调整,直接加了一个定时器,定时器间隔小于500ms,这样定时器会产生消息,让delay函数能不阻塞的运行下去,这样界面能自动刷新了。

© 版权声明
THE END
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞0
分享
评论 抢沙发