socket传输来的数据实时处理的问题
tcp协议的socket通信,客户端从服务器接收连续的测量数据,服务器端是每秒25次的测量速度,但是每次测量数据的长度是不定的,并且数据量很大。我按照估算的一次测量数据的...
tcp协议的socket通信,客户端从服务器接收连续的测量数据,服务器端是每秒25次的测量速度,但是每次测量数据的长度是不定的,并且数据量很大。我按照估算的一次测量数据的最大值设置socket.Recieve()的buffer,想要对buffer接收到的数据进行及时地处理,如分离出各次数据中的有效数据等。
我在socket的OnRecieve()函数中利用while循环,使buffer接收Recieve()的数据,并将将buffer中接受的内容赋给了字符串变量m。这里我想每隔一段时间对接收到的数据进行一次处理,设置了一个定时器,settimer(1,200,NULL),定义了一个全局字符串变量mstr,在ontimer()函数里,,mstr+=m,并开一个线程对mstr进行处理。
不知道这种做法是否可行 展开
我在socket的OnRecieve()函数中利用while循环,使buffer接收Recieve()的数据,并将将buffer中接受的内容赋给了字符串变量m。这里我想每隔一段时间对接收到的数据进行一次处理,设置了一个定时器,settimer(1,200,NULL),定义了一个全局字符串变量mstr,在ontimer()函数里,,mstr+=m,并开一个线程对mstr进行处理。
不知道这种做法是否可行 展开
2个回答
展开全部
这种做法可以。不过,还可以更节省性能(buffer给m,m又给mstr,定时器启动,新开线程,相对来说要都有点浪费了)。
你可以这样,开一个线程,循环等待数据(包括buffer的数据)。然后用socket去接收数据到buffer中,接收以后,把buffer扔给线程去处理,再新开一个buffer用于下次接收。线程里收到buffer数据后,生成字符串,再把字符串跨线程送给画面显示(如果有显示要求的话)。
socket接收的数据非常频繁,上述性能跟不上的时候,可以使用一个buffer[N]缓存池来替代buffer,避免频繁动态申请内存。
你可以这样,开一个线程,循环等待数据(包括buffer的数据)。然后用socket去接收数据到buffer中,接收以后,把buffer扔给线程去处理,再新开一个buffer用于下次接收。线程里收到buffer数据后,生成字符串,再把字符串跨线程送给画面显示(如果有显示要求的话)。
socket接收的数据非常频繁,上述性能跟不上的时候,可以使用一个buffer[N]缓存池来替代buffer,避免频繁动态申请内存。
追问
不是很明白 “把buffer扔给线程去处理,再新开一个buffer用于下次接收”
追答
你的代码里的m是干什么用的?不就是为了临时保存buffer的数据,并且传递给mstr嘛。
为什么不省掉m,直接把buffer保存到mstr中不行吗?
迪凯特科技(北京)有限公司
2023-07-28 广告
2023-07-28 广告
单片机串口通信数据丢失的原因可能如下:1. 按键通过串口发送对应命令,第一次按按键串口发送的指令正确且能把数据正确的显示出来,在第二次按按键串口发送的指令出现丢失的状况,可能是因为串口通信的波特率设置不正确。2. 如果单片机和外部设备的波特...
点击进入详情页
本回答由迪凯特科技(北京)有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询