请教个问题,vc高手进入 在线等

wangjing20081996 2011-02-28 08:58:25
串口发送数据帧,每帧数据间隔以
do
{
MSG msg;
GetMessage(&msg,NULL,0,0);
TranslateMessage(&msg);
DispatchMessage(&msg);
dwEnd = GetTickCount()-dwStart;
}while(dwEnd <50);
进行延时
每次发送数据量不等,但每帧数据长度一样,6个字节,发送也时间不等,比如连续发送不到1秒-4天,现在有问题是:
1.在串口发送中不断要有消息才能发送数据,比如不断摇摆鼠标等,猜测可能是在GetMessage(&msg,NULL,0,0);这儿等待,于是改为:
do
{
MSG msg;
if( GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
dwEnd = GetTickCount()-dwStart;
}while(dwEnd <50);但跟上述情况一样。试问此种情况如何解决。别告诉我去掉msg处理部分,那样程序跟死机了一样。
2.如果在串口发送没有结束时关闭此程序后,任务管理器中还有程序进程在运行,试问如何彻底关闭发送进程。如何在OnDestroy中添加代码还是在其他部分添加代码



或许对于以上两个问题,各位有更好的思路,可以重新换种方法,请给点建设性的意见?
...全文
102 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangjing20081996 2011-03-23
  • 打赏
  • 举报
回复
3楼完全正确
向立天 2011-03-19
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
无水先生 2011-03-01
  • 打赏
  • 举报
回复
将你上面的程序移到线程里去!
nicklisir 2011-03-01
  • 打赏
  • 举报
回复
换种思路吧,不该在消息循环里定时;定时期间,程序收不到消息就无法工作,一样造成CPU占有上升;把定时放一个函数了;在函数里处理你自己的信息;在消息循环中调用
sxqinge 2011-03-01
  • 打赏
  • 举报
回复
在窗口关闭函数中销毁串口句柄
wangjing20081996 2011-03-01
  • 打赏
  • 举报
回复
同志们给看看呀
wangjing20081996 2011-02-28
  • 打赏
  • 举报
回复
3楼建议不错,我试试
对于第二种情况不知如何处理?
nicklisir 2011-02-28
  • 打赏
  • 举报
回复
GetMessage是要等到有信息才返回;何不用PeekMessage;另外msg的定义放外面比较好
wangjing20081996 2011-02-28
  • 打赏
  • 举报
回复
就是在两帧数据直接有个延时,延时部分如上



以下内容来自《Windows中7种定时器》
方式四:在精度要求较高的情况下,VC中可以利用GetTickCount()函数,该函数的返回值是 DWORD型,表示以ms为单位的计算机启动后经历的时间间隔。精度比WM_TIMER消息映射高,在较 短的定时中其计时误差为15ms,在较长的定时中其计时误差较低,如果定时时间太长,就好象死机一样,CPU占用率非常高,只能用于要求不高的延时程序中。如示例工程中的Timer4和Timer4_1。下列代码可以实现50ms的精确定时:

DWORD dwStart = GetTickCount();
DWORD dwEnd = dwStart;
do
{
dwEnd = GetTickCount()-dwStart;
}while(dwEnd <50);
为使GetTickCount()函数在延时或定时期间能处理其他的消息,可以把代码改为:

DWORD dwStart = GetTickCount();
DWORD dwEnd = dwStart;
do
{
MSG msg;
GetMessage(&msg,NULL,0,0);
TranslateMessage(&msg);
DispatchMessage(&msg);
dwEnd = GetTickCount()-dwStart;
}while(dwEnd <50);
虽然这样可以降低CPU的占有率,并在延时或定时期间也能处理其他的消息,但降低了延时或定时精度。
心留 2011-02-28
  • 打赏
  • 举报
回复
没看明白你的代码。。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧