棋牌源码吧

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 275|回复: 0

网狐棋牌框架-WHDataQueue队列的问题

[复制链接]

2971

主题

0

回帖

8930

积分

超级版主

Rank: 8Rank: 8

积分
8930
发表于 2023-8-9 03:19:27 | 显示全部楼层 |阅读模式
研究网狐的内核框架发现经常有以下错误:

SocketEngine Index=0,RountID=18,OnRecvCompleted 发生“数据包效验码错误”异常
因字节跳动股票为不是必现的问题,非常不好排查,而网狐的东西也相对较稳定,不知如何下手,然后就仔细看内核相关的代码,看到了内存数据队列;WHDataQueue队列的实现其实还是非常巧妙的,用变量标志就在一个内存块上实现了环形的队列,越是巧妙的东西,就越容易出错,也长度单位换算口诀就越需要打磨,虽然研究网狐框架代码内存条哪个牌子好的人很多,但不知道为什么我在网上各种找资料,就是找不到这个问题的解决方案,可能这是个偶发的问题,在服务端跑的时候,也极少出现,就算出现也只是影响某个玩家,所以问题就被数据漫游是什么意思隐藏了吧。
int nIndex = 0;TCHAR szInfo[4096] = TEXT("");int nLen = 0;//写入0字节, 让gDataQueue内存块大小为 40, 实际上是写入4字节,因为里面还有个数据头rand_str(szInfo, 0);gDataQueue.InsertData(++nIndex, szInfo, 0);tagDataHead head;//取出,之后 m_dwDataQueryPos 变成4gDataQueue.DistillData(head, szInfo, sizeof(szInfo));//写入16个字节rand_str(szInfo, 7);nLen = CountStringBuffer(szInfo);gDataQueue.InsertData(++nIndex, szInfo, nLen);std::cout 修复代码:
在bool CWHDataQueue::Rectify数据漫游是什么意思Buffer(DWORD dwNeedSize)函数中加上一行:

try{//缓冲判断if ((m_dwDataSize+dwNeedSize)>m_dwBufferSize) throw 0;//重新开始if ((m_dwInsertPos==m_dwTerminalPos)&&((m_dwInsertPos+dwNeedSize)>m_dwBufferSize)){if (m_dwDataQueryPos>=dwNeedSize) m_dwInsertPos=0;else throw 0;}//缓冲判断if ((m_dwInsertPosm_dwDataQueryPos)) throw 0;//头追上尾或尾追上头if (m_dwInsertPos + dwNeedSize > m_dwDataQueryPos && m_dwDataQueryPos >= m_dwInsertPos){//尾追上头if (m_dwDataSize > 0) throw 0;}}
游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|棋牌源码吧

GMT+8, 2024-11-3 21:56 , Processed in 0.069986 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表