mFC 在udp接收线程接收实时数据

duguxianchen 2012-12-13 11:25:35
网络没有丢包(包的数据总量没少)在接收中开了一个线程,在while循环里用两块固定大小内存交替接收(我这里用了2个链表),1个满了就PostMessage 在消息里专门写入数据库,用另外一个链表接收数据,但是好像一PostMessage 出去,在从链表中取出结构体里的一个字段,就出现接收到的数据结构体中字段出现变成一片0的情况。不知道是不是因为在for循环下,从链表里一个个取出结构体导致时间来不及取出来,还是链表内存混乱了??不知道有谁遇到过或接收处理够实时数据??数据量太大了。。
感觉好像来不及从链表中获取数据,是不是要开一个另外一个存储线程,专门用来写数据
...全文
651 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
心疼包 2014-06-30
  • 打赏
  • 举报
回复
我也是在写UDP协议接收数据实时显示在界面上的……求发类似的程序或者指导啊!!!
7-Eleven 2013-01-22
  • 打赏
  • 举报
回复
楼主!!我现在做的一个项目也是基于UDP的实时数据接收和数据库存储....接收我用的是c#写的..按照约定的通讯协议接收解析...但是用了好多种方法掉包率都一直很高...可不可以指点一下..拜托了!!!
duguxianchen 2012-12-14
  • 打赏
  • 举报
回复
(TCP 不适用实时接收数据,下位机不会发重复的包)我还是试试线程同步,昨天看到一篇文章说,工业上对实时数据接收和存储要求严格,不是觉得TCP就用TCP的,这个必须以UDP为前提,
duguxianchen 2012-12-14
  • 打赏
  • 举报
回复
[quote=引用 3 楼 tiger9991 的回复:] 楼主说没丢包了。 1.楼主用两个缓存区交互交替接收数据这个方法是不错,但是楼主要考虑到一个问题。是不是两个缓冲区够大,就是还没等到你写完数据库,另外个也满了,又交替把你第一个满的缓冲区给清空了? /////////////////////////////////// 我给了10秒让一个链表接收数据,另外一个链表写数据,通过事务一次提交10000个insert into (没用批量) ,它写数据库的时间在5秒钟左右
zzz_zou 2012-12-14
  • 打赏
  • 举报
回复
一般来说都是接收数据后放入一个队列,另外再专门用线程对数据进行处理。 这样IO的压力最小。
傻X 2012-12-14
  • 打赏
  • 举报
回复
楼主说没丢包了。 1.楼主用两个缓存区交互交替接收数据这个方法是不错,但是楼主要考虑到一个问题。是不是两个缓冲区够大,就是还没等到你写完数据库,另外个也满了,又交替把你第一个满的缓冲区给清空了? 2.你用PostMessage通知界面线程写数据库?(这个会卡吧)用PostThreadMessage发送到工作线程中去吧。 (觉得麻烦可以用互斥进程来实现) 主要看看1中的问题是否存在。
YunXia98Li 2012-12-14
  • 打赏
  • 举报
回复
UDP是不可靠的,数据会丢失,建议用TCP socket,这里有socket例子,可参考: thttp://download.csdn.net/detail/geoff08zhang/4571358
duguxianchen 2012-12-14
  • 打赏
  • 举报
回复
接收线程中,没100毫秒会收到一组数据,在处理写入的线程中改怎么弄呢?线程同步的话,在写数据库时,可能导致接收线程没法接收数据包啊、、、、、接收线程能sleep么
西山小月 2012-12-13
  • 打赏
  • 举报
回复
需要的 需要的

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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