MFC 写的串口助手当一直处在接收数据状态的时候会卡主 无法进行其他操作

Sky-Ye CSDN会员 Sky-Ye 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
最近在学习用MFC MSComm接口来写串口助手,遇到一个问题,发现当串口一直处在数据接收时,刚开始其他button按键消息还能响应,过一会儿其他按键消息也不能响应,接收的字节数也无法更新,只有接收框内数据在更新,其他界面都无法响应。
网上查资料说需要多线程控制,MSComm控件如何使用多线程来解决这个问题,或是有其他办法?求高人指点。。。。。。

如下是接收事件部分代码:
void CSerialCommAppDlg::OnCommMscomm1()
{
// TODO: 在此处添加消息处理程序代码
VARIANT m_varInput;
CString strtemp;
COleSafeArray safearray_input;
long len = 0, k = 0;
BYTE RxData[MAX_BUFFER_SIZE];//设置byte数组MAX_BUFFER_SIZE=2048
strtemp.Empty();

if (m_MSComm.get_CommEvent() == 2)//事件2表示接受缓冲区有字符
{
m_varInput = m_MSComm.get_Input();//读接收缓冲区
//safearray_input = m_varInput;//variant数据转换成colesafearray型变量
safearray_input.Attach(m_varInput);
len = safearray_input.GetOneDimSize();//得到有效数据长度

for (k = 0; k<len; k++) //转换为byte型数组
safearray_input.GetElement(&k, RxData + k);

if (m_checkHEXShow.GetCheck()) //选择十六进制显示
{
for (k = 0; k < len; k++)
{
strtemp.Format(_T("%02X "), *(RxData + k));//将BYTE型数组转换成HEX变量
m_editRecieve += strtemp; //加入接收编辑框相应字符串
}
}
else
{ //选择字符显示
for (k = 0; k < len; k++)
{
strtemp.Format(_T("%c"), *(RxData + k));//将BYTE型数组转换成CString型变量
m_editRecieve += strtemp;//加入接收编辑框相应字符串
}
}

m_editRecieveNum += len; //接收字节数计数
m_strRichEditRecieve.Format(_T("接收:%d"), m_editRecieveNum);
UpdateData(false);//更新编辑框内容

//m_ceditRx.SetSel(-1, -1);
//this->SetDlgItemTextW(IDC_EDIT2, m_editRecieve);//将m_EditReceive内容显示到ID为IDC_EDIT2的编辑框的最后位置
m_ceditRx.LineScroll(m_ceditRx.GetLineCount() - 1, 0);//将垂直滚动条滚动到最后一行

}

}
...全文

相关推荐

MFC实现的串口助手源码

MFC实现的串口助手源码,自己写的,希望对大家有帮助~

yelloworange

基于VC与MFC的串口调试工具开发:从线程模型到CRC校验的完整实践

在嵌入式开发与工控领域中,串口通信是设备调试与数据采集的基础能力。掌握上位机开发中的串口编程,意味着能够高效地完成协议解析、数据监控与指令下发。Windows平台下,通过VC与MFC框架可以快速构建稳定可靠的串口调试工具,其核心在于理解文件句柄操作、DCB参数配置以及事件驱动的多线程模型。使用CreateFile与ReadFile实现底层数据收发,结合WaitCommEvent避免界面卡死,配合缓冲区优化与十六进制显示,能够应对高速数据流场景。CRC16校验、定时发送、数据过滤等扩展功能进一步提升了协议的调

weixin_33875564

MFC定时器驱动列表框自动刷新:从SetTimer到OnTimer的完整实现

在桌面应用开发中,定时刷新界面数据是设备监控、日志管理、串口调试等工具的核心需求。定时器作为操作系统提供的间隔通知机制,通过消息循环驱动界面更新;列表框则负责展示多行文本数据。两者结合,能实现稳定的周期刷新,但若处理不当,易出现卡顿、闪烁或定时器失效等问题。理解定时器的工作原理(如MFC中的SetTimer与WM_TIMER消息映射)以及列表框的高效操作(如限制条目数、批量重绘),是构建流畅界面的关键。本文从定时器与列表框的基础概念出发,结合Windows消息机制与UI线程模型,详细讲解MFC框架下从初始化

weixin_34226706

MFC串口接收数据并实时显示

能实现从串口收发数据,并实时显示波形,以及处理后的波形

sunxiaohui2050

基于MFC的使用API接口编写的串口调试助手源码

使用MFC开发的,利用WIN32 API函数和多线程编写的串口调试助手源码。

ninjawi
评论 2
收藏 已收藏
分享
返回顶部
Sky-Ye CSDN会员
ActiveX/COM/DCOM 703 成员 3,001 内容