[发明专利]网络游戏服务器陷入死循环的处理方法有效
申请号: | 201410050333.5 | 申请日: | 2014-02-14 |
公开(公告)号: | CN103810053B | 公开(公告)日: | 2017-06-13 |
发明(设计)人: | 刘德建;陈宏展;郭锐;陈南 | 申请(专利权)人: | 福建天晴数码有限公司 |
主分类号: | G06F11/07 | 分类号: | G06F11/07 |
代理公司: | 福州市鼓楼区京华专利事务所(普通合伙)35212 | 代理人: | 宋连梅 |
地址: | 350000 福*** | 国省代码: | 福建;35 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 网络游戏服务器陷入死循环的处理方法,首先检测死循环,当判定主线程陷入死循环后,监护线程就将主线程挂起,使它暂时停止运行。在主线程的Lua语言程序陷入死循环后,通过监护线程的处理,主动触发Lua的运行时错误,让它中止运行,然后跳回到C/C++里,这样就从死循环中解脱出来,然后通过一些后续处理,来避免再运行相同的代码,从而避免再次陷入死循环。本发明提供一种稳定有效的网络游戏服务器陷入死循环后的处理方法。 | ||
搜索关键词: | 网络游戏 服务器 陷入 循环 处理 方法 | ||
【主权项】:
网络游戏服务器陷入死循环的处理方法,其特征在于:包括如下步骤:第一步骤:死循环的检测:在主线程处理消息前,将这些消息的每一个唯一id、类型和当前时刻记录下来,保存在一个可多线程访问的结构类型的数据里,然后调入到Lua脚本程序里对这些消息进行处理,处理完后回到C++程序里时,再将这些消息清空;监护线程以固定的频率来检测这些消息的处理情况,不同的消息通过消息的唯一id来标识,如果每次检测时,发现都是在同一个消息的处理状态中,并且处理时间已经超过了最大值,那么就判断Lua脚本程序陷入了死循环,并因此间接导致主程序陷入死循环;第二步骤:死循环的恢复:当判定主线程陷入死循环后,监护线程就将主线程挂起,使它暂时停止运行,然后取得Lua脚本程序实例,就是lua_State对象,然后通过Lua脚本程序库的接口,取得当前的运行堆栈,记录到日志中,方便查出到底是哪里的代码引起了死循环;然后取得Lua脚本程序实例中的_G全局变量,将_G这个table中的所有变量和函数,移到另外一个新建的table,清空_G变量里的数据;然后监护线程将主线程设置为进入“Lua脚本程序死循环错误状态”,然后再恢复主线程的运行,当主线程里的Lua脚本程序代码访问到_G里的变量或函数,会触发Lua错误,就会跳回到C++程序里,主线程就成功地从死循环中跳出来了;跳回到C++程序里后,检测到当前是“Lua脚本程序死循环错误状态”,就将Lua脚本程序中的_G_BACKUP存储的变量和函数取出,设置回_G全局变量中,就恢复了Lua脚本程序的正常运行环境。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于福建天晴数码有限公司,未经福建天晴数码有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201410050333.5/,转载请声明来源钻瓜专利网。