MFC中,怎样利用多线程和回调函数,从串口调试助手中接收数据,然后在编辑框中显示出来?

我想编一个基于对话框的程序comsendrecv.exe,与串口调试助手之间进行通信(利用VSPE),
串口调试助手中已经能接收我从comsendrecv.exe中发送的数据了,现在我想在comsendrecv.exe中接收到串口调试助手中发过来的数据,我已经写好了一个串口类SerialPort,请问我还要在该类和对话框类中添加什么,是怎么样一个流程,跪求大神帮忙啊~~~~~~~~~~~~

你在你的串口类SerialPort里面加一个线程函数或者回调函数private函数:
static DWORD WINAPI ReceiveData(LPVOID lpParam); //线程函数
static WORD ProcessReceiveData(void* data);
void ProcessData(DWORD (*Func)(void*) ); //回调函数

然后再你接收数据的地方创建一个线程或者回调函数来处理你从串口接收到的数据:
CreateThread(NULL, 0, ReceiveData, this(或者你传入的参数) ,NULL, 0);//忘记了函数参数啊 或者
ProcessData(ProcessReceiveData);

最后将该数据在编辑框中显示出来就可以了
(CEdit*)GetDlgItem(ID_xxx)->SetWindowsText("DATA");
只是提供一个思路
温馨提示:内容为网友见解,仅供参考
无其他回答

...接收到的数据不完整少于29个。我用串口调试助手 每次接收到的29个...
BYTE bt=*(char*)(rxdata+k); \/\/字符型 strtemp.Format("%X",bt); \/\/将字符送入临时变量strtemp存放 m_EditRxData+=strtemp; \/\/加入接收编辑框对应字符串 } 这个FOR也是同样的问题

MFC中MSComm控件的oncomm在发送数据和接收数据的时候都不触发
m_ctrlComm.SetRThreshold(1);\/\/参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据n的OComm事件 这一句是不是没有设置?

如何用vc++写串口调试助手
到目前为止还不能在接收编辑框中看到数据,因为我们还没有打开串口,但运行程序不应该有任何错误,不然,你肯定哪儿没看仔细,因为我是打开VC6对照着做一步写一行的,运行试试。没错吧?那么做下一步:6.打开串口和设置串口参数 你可以在你需要的时候打开串口,例如在程序中做一个开始按钮,在该按钮的处理函数中打开串口...

MFC中的setTimer()函数
你把仿真函数放到WM_TIMER的消息函数中就可以了。

Visual C++\/Turbo C串口通信编程实践目录
使用串口调试助手来体验串口通信 体验Windows环境下的Visual C++串口通信编程 体验DOS环境下Turbo C串口通信编程 多线程串口编程工具CSerialPort类功能及成员函数介绍 应用CSerialPort类编制基于对话框的应用程序 应用CSerialPort类编制基于单文档的应用程序 对CSerialPort类的改进 改进一:ASCII文本和二进制数据发送...

如何捕获MFC串口通信中的奇偶校验错误信息或事件?
打开串口的时候需要设置串口参数,你把串口设置为偶校验,然后就能检测到错误了,还有一个可能,发送的时候你要的串口工具吧,有好多串口工具是不管校验的,虽然你选了奇校验,但是没有使用奇校验发送

SetPortsvc.exe什么程序?
UpdateData(TRUE); \/\/读取编辑框内容 m_ctrlComm.SetOutput(COleVariant(m_strTXData));\/\/发送数据 } 运行程序,在发送编辑框中随意输入点什么,单击发送按钮,啊!看看,在另一端的串口调试助手(或别的调试工具)接收框里出现了什么。说明:由于用到VC控件,在没有安装VC的计算机上运行时要从VC中...

MFC 将文本框内容转为十六进制的字符串
m_ctrlComm.SetOutput(COleVariant(m_strTXData));\/\/发送ASCII字符数据 } 现在,你先将串口线接好并打开串口调试助手V2.1,选上以十六制显示,设置好相应串口,然后运行我们这个程序,在发送框中输入00 01 02 03 A1 CC等十六进制字符,并选上以十六进制发送,单击手动发送,在串口调试助手的接收框...

相似回答