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

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

【全新正版】C语言从入门到精通c语言程序设计c++电脑编程入门零基础自学轻松学计算机c语言入门软件程序员开发教程教材书籍
全新版【赠:电子书实战案例+VC6.0安装包】 | 月销量2075件
优惠价28.8元
原价¥98

淘口令:

¥aixlX9xDjY2¥
 

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
分享
评论 抢沙发