为什么程序全速运行时不进入消息处理函数,设置断点后又能进入消息处理函数呢?

lib6303c 2019-04-26 09:57:46
大家好,为什么程序全速运行时不进入消息处理函数,设置断点后又能进入消息梳理函数呢?下面是关键代码,还请各位不吝赐教!谢谢了!如果提供的代码不全,我再上传。
开发工具及开发语言:RAD C++ Builder 10.2


//当接受到数据送到窗口的消息
#define ON_COM_RECEIVE (WM_USER + 618) // WPARAM 端口号

private: // User declarations
void __fastcall OnReadData(TMessage &Msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(ON_COM_RECEIVE, TMessage, OnReadData)
END_MESSAGE_MAP(TForm)

//消息处理函数:
void __fastcall TForm_TestSpecDevice::OnReadData(TMessage &Msg)
{
if (Msg.Msg == ON_COM_RECEIVE)
{
len = MyComm1.Read(Temp, 6152);

if((len == 8) && ((Temp[0] == 'S') && (Temp[3] == 'A') && (Temp[4] == 'C') && (Temp[5] == 'K')))
{
RecvFlg = 1;
memset(Temp, 0, sizeof(Temp));
}
else if ((len > 2048))
{
DataDecompressionAlgorithm(Temp,len,G_pArray);
if(SpecDateRecvOK ==1)
{
RecvFlg =0;
SpecDateRecvOK =0;
memset(Temp, 0, sizeof(Temp));
//len =0;
}
else
{
SpecDateRecvOK =0;
memset(G_pArray, 0, sizeof(G_pArray));
RecvFlg =0;
memset(Temp, 0, sizeof(Temp));
//len =0;
}
}
else if((len ==0)||((len>8)&&(len<2048)))
{
RecvFlg =0;
//len =0;
}
else;
}
}
...全文
202 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
draculamx 2019-04-30
  • 打赏
  • 举报
回复
引用 5 楼 早打大打打核战争 的回复:
估计是这个地方:
len = MyComm1.Read(Temp, 6152);
阻塞了

这到是的,如果串口是同步模式,又没有设置超时的话,这个地方就阻塞了
  • 打赏
  • 举报
回复
估计是这个地方:
len = MyComm1.Read(Temp, 6152);
阻塞了
ccrun.com 2019-04-29
  • 打赏
  • 举报
回复
检查一下有没有大量占用主线程资源的代码。
ooolinux 2019-04-26
  • 打赏
  • 举报
回复
查一下Help,TApplication类的ProcessMessages方法。
lib6303c 2019-04-26
  • 打赏
  • 举报
回复
谢谢您的回答,还是不懂,请您详细给我说下。
ooolinux 2019-04-26
  • 打赏
  • 举报
回复
长时间循环中Application->ProcessMessages()以处理响应队列中的消息。

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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