• 为Unreal添加一个定时运行的功能模块


          在unreal中,有时需要根据自已的需要添加自已的定时运行的功能程序,如果你想实现这样的功能,请按照下列步骤进行,以我添加的定时检查Mysql连接情况(因为Mysql系统默认48还是多少小时后断开一个不活动的连接,如果在这个时间内,收到连接的mysql_ping消息,则该连接不会断掉):

          1,在include\h.h文件最末,添加如下定义:
    extern EVENT(check_mysql_conn);

          2,在src\events.c 212行附件,修改为如下代码:
        /* Start events */
        
    //add by oldhawk
        EventAddEx(NULL, "check_mysql_conn"6000, check_mysql_conn, NULL); //这里的600表是3分钟执行一次
        
    //add end
        EventAddEx(NULL, "tunefile"3000, save_tunefile, NULL);
        EventAddEx(NULL, 
    "garbage", GARBAGE_COLLECT_EVERY, 0, garbage_collect, NULL);

          3,继续,在src\events.c最后,添加如下代码:
    //add by oldhawk
    EVENT(check_mysql_conn)
    {
        
    if(strcmp(MYSQL_HOST,"0")){
            
    //ircd_log(LOG_SERVER,"in event check_mysql_conn");
            if(!my_conn){    //数据库未连接,可能是首次起动
                ircd_log(LOG_CLIENT,"Begin to connect to Mysql");

                my_conn
    =my_mysql_connect();
                
    if(!my_conn){
                    sendto_ops(
    "Mysql 数据库服务器出现故障,请通知管理员排除!");
                    ircd_log(LOG_SERVER,
    "Mysql Connect : ERROR!");
                    
    return;
                }
    else{
                    mysql_query(my_conn,
    "SET NAMES 'gb2312'"); 
                    ircd_log(LOG_SERVER,
    "Mysql Connect : OK!");
                }
            }
    else{            //数据库已连接,则测试激活
                if(my_mysql_ping(my_conn)!=0){
                    ircd_log(LOG_SERVER,
    "Mysql Ping : mysql ping error");
                    my_conn
    =my_mysql_connect();
                    
    if(!my_conn){
                        sendto_ops(
    "Mysql 数据库服务器出现Ping故障,请通知管理员排除!");
                        ircd_log(LOG_SERVER,
    "Mysql Ping reConnect : ERROR!");
                        
    return;
                    }
    else{
                        mysql_query(my_conn,
    "SET NAMES 'gb2312'"); 
                        ircd_log(LOG_SERVER,
    "Mysql Ping reConnect : OK!");
                    }
                }
    else{
                    ircd_log(LOG_SERVER,
    "Mysql Ping: OK!");
                }
            }
        }
    }
    //add end

          上面的代码中,会每三分钟检查一次mysql连接是否正常,如果不正常,则重新连接。关于mysql的操作及代码,请参考前面的文章。
  • 相关阅读:
    Java8 Stream源码精讲(三):中间操作原理详解
    【高并发】高并发环境下如何优化Tomcat性能?看完我懂了!
    九种跨域方式实现原理(完整版)
    Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...想要的这都有!
    Java8 Stream源码精讲(四):一文说透四种终止操作
    Java8 Stream源码精讲(二):Stream创建原理深度解析
    【Java】几种典型的内存溢出案例,都在这儿了!
    面渣逆袭:MySQL六十六问,两万字+五十图详解!
    【如何亮剑】用例子讲解Stream
    一文带你搞懂 JWT 常见概念 & 优缺点
  • 原文地址:https://www.cnblogs.com/taobataoma/p/834868.html
Copyright © 2020-2023  润新知