VC++使用MSComm控件串口编程OnComm事件中处理数据如何使用多线程

时间:2021-05-13 19:56:19
在VC++中,使用MSComm控件进行串口编程,在OnComm消息函数中,需要接收-发送-接收数据,因数据处理量较大,处理过程中,界面不能很好的刷新,所以想把OnComm消息函数放在副线程中,不知道如何创建,望各位指教!
void CCOMDlg::OnCommMscomm1() 
{
   //接收数据-发送数据
}

10 个解决方案

#1


在OnCommMscomm1()中启用线程函数就可以了啊。 

#2


那MScomm的变量要如何传递到线程函数中

#3


都没人帮我啊!自己先给自己顶一个!

#4


在建立线程时,线程函数里有一个参数,这个参数的类型好象是LPVOID,用这个参数就可以把MSCOMM变量传进去,在线程里再把这个参数转换成MSCOMM控件类型就行了(就是类型转换)。

#5


也可以建立一个MSCOMM全局变量,把MSCOMM这个控件的关联变量赋给这个全局变量,在线程里使用这个全局变量

#6


1.新建线程A,全局事件g_event
2.把mscomm父窗口的指针p传给A
3.在mscomm父窗口的OnCommMscomm1中g_event.SetEvent
4.A中等待事件g_event,等到后通过p调用mscomm读取并处理数据

#7


4楼能否给出具体怎么实现   谢谢  

#8


简单的线程同步问题。创建线程的开销很大,在那是创建是不现实的,你可以在初始化时创建处理线程,通过PostThreadMessage通知线程处理(内容放在wpaeam/lparam),在那个线程等这个消息处理就行,或者用信号量、事件通知都可以

#9


我这边做的比较复杂,公司的代码,串口通讯这块是封装好的类A,在类B中封装一些函数,提供发送和接受命令,将A的指针放在B中,并对A进行初始化,就是串口的打开关闭什么的。在类C中得到B的指针,提供一个可以访问的方法。这样线程就写在C中了。

#10


引用 1 楼 slek 的回复:
在OnCommMscomm1()中启用线程函数就可以了啊。 

请问如果我只是想做个发送程序的话,是不是不用添加那个串口响应函数OnCommMscomm1()?

#1


在OnCommMscomm1()中启用线程函数就可以了啊。 

#2


那MScomm的变量要如何传递到线程函数中

#3


都没人帮我啊!自己先给自己顶一个!

#4


在建立线程时,线程函数里有一个参数,这个参数的类型好象是LPVOID,用这个参数就可以把MSCOMM变量传进去,在线程里再把这个参数转换成MSCOMM控件类型就行了(就是类型转换)。

#5


也可以建立一个MSCOMM全局变量,把MSCOMM这个控件的关联变量赋给这个全局变量,在线程里使用这个全局变量

#6


1.新建线程A,全局事件g_event
2.把mscomm父窗口的指针p传给A
3.在mscomm父窗口的OnCommMscomm1中g_event.SetEvent
4.A中等待事件g_event,等到后通过p调用mscomm读取并处理数据

#7


4楼能否给出具体怎么实现   谢谢  

#8


简单的线程同步问题。创建线程的开销很大,在那是创建是不现实的,你可以在初始化时创建处理线程,通过PostThreadMessage通知线程处理(内容放在wpaeam/lparam),在那个线程等这个消息处理就行,或者用信号量、事件通知都可以

#9


我这边做的比较复杂,公司的代码,串口通讯这块是封装好的类A,在类B中封装一些函数,提供发送和接受命令,将A的指针放在B中,并对A进行初始化,就是串口的打开关闭什么的。在类C中得到B的指针,提供一个可以访问的方法。这样线程就写在C中了。

#10


引用 1 楼 slek 的回复:
在OnCommMscomm1()中启用线程函数就可以了啊。 

请问如果我只是想做个发送程序的话,是不是不用添加那个串口响应函数OnCommMscomm1()?