网狐内核引擎 定时器 问题

自助开通VIP,整站资源任意下载

最近在网上下到 网狐6.6 内核引擎,这回算是有了全套了,朋友又送了套捕鱼达人的游戏,架起来总有问题。

  反复调试,发现问题在于内核中定时器部分。

  看了下内核的代码,但从定时器上看好像没有任何问题,在6.5的内核中,每个定时器到时间以后都通过

  PostQueuedCompletionStatus

  发送了一个完成包,然后就返回了。但是 6.6 中定时器部分不是走的这个机制 (ps:也有可能我下的代码不是出自网狐),代码片段:

  try

  {

  BYTE cbBuffer[MAX_ASYNCHRONISM_DATA] = {0}; //接收缓冲

  //投递消息

  NTY_TimerEvent pTimerEvent = (NTY_TimerEvent )cbBuffer;

  pTimerEvent->dwTimerID = pTimerItem->wTimerID;

  pTimerEvent->dwBindParameter = pTimerItem->wBindParam;

  m_pIQueueServiceSink->OnQueueServiceSink(EVENT_TIMER, cbBuffer, sizeof(NTY_TimerEvent));

  }

  catch (…) { }

  //设置次数

  if (pTimerItem->dwRepeatTimes != TIMES_INFINITY)

  {

  ASSERT(pTimerItem->dwRepeatTimes > 0);

  pTimerItem->dwRepeatTimes--;

  if (pTimerItem->dwRepeatTimes == 0L)

  {

  bKillTimer = true;

  m_TimerItemActive.RemoveAt(i);

  m_TimerItemFree.Add(pTimerItem);

  }

  }

  m_pIQueueServiceSink 是时间引擎保存的是一个接口指针。 通过这个指针转几道手,一直到调用了游戏中的定时器消息响应函数

  OnTimerMessage(WORD wTimerID, WPARAM wBindParam) ? 才会返回往下执行 “设置次数”后面的代码。 这样就出现问题了,如果游戏中在 OnTimerMessage 里嵌套设置同一个定时器,就会先走完 SetTimer 再走下面的“设置次数”,“移出定时器”,SetTimer 里监测有没有同ID定时器的时候,自然发现已经存了该定时器,不会把该定时器放入定时器列表。等OnQueueServiceSink 返回以后,将该定时器删除掉,于是重新设置的定时器就有没设置成功。

  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  解决方法:将上面代码调整一下次序。 先设置次数,删除定时器以后,再调用 OnQueueServiceSink。另外 NTY_TimerEvent 的值比较大,可以将

  BYTE cbBuffer[MAX_ASYNCHRONISM_DATA] = {0}; //接收缓冲

  改成

  BYTE cbBuffer[sizeof(NTY_TimerEvent)] = {0}; //接收缓冲

网狐内核引擎 定时器 问题

  还有一种修改方法,就是仍然采用发送完成端口包的方式,照着内核中其他使用队列服务的地方摘过来就可以了,这种方法更科学

网狐内核引擎 定时器 问题

  上张捕鱼的图,修复了刷金问题

本站源码仅做学术研究,自娱自乐使用,不得用于赌博性质的非法商业用途!转载请说明出处!
棋牌资源网 » 网狐内核引擎 定时器 问题

这里有你所需要的,找专业的人做专业的事!

游戏演示 联系客服