zoukankan      html  css  js  c++  java
  • 智能预判 (三:布局加强)

    线程启动项目 修改 在 AppServer 类中,方便管理。

    同时增加心跳,用来同步 数据并 定时批量存储数据库。

            protected override void OnStarted()
            { 
                ThreadPoolMain.OnStartThreadPool();
                OnTimeServer();
                base.OnStarted(); 
            }
    
            //规定时间 检查一次心跳
            public void theout(object source, System.Timers.ElapsedEventArgs e)
            {
               if(ServerModel.getInstance().queue.Count>0)
               {
                   JsonData[] mes = ServerModel.getInstance().queue.Dequeue();
                   //拿到数据,批处理 算出 效益,并存放数据库
                  // Console.WriteLine("检测有没有发送过来 目前用户" + this.SessionCount); 
               }  
            } 
    
            //定时器 作用, 同步 存储数据库 计算收益
            void OnTimeServer()
            {
                System.Timers.Timer t = new System.Timers.Timer(2000);//实例化Timer类,设置间隔时间为10000毫秒;
                t.Elapsed += new System.Timers.ElapsedEventHandler(theout);//到达时间的时候执行事件;
                t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
                t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;  
            } 

     线程管理类 负责 推送给 定时器,同时定义数组JsonData[] obj

    负责临时存放 事物,分配给各类线程处理。

            public bool QueueWorkItem(ManualResetEvent eventX, int task)
            {
                //   Console.WriteLine("线程池开始分配任务");
                //定义数组
                JsonData[] obj = new JsonData[task];
    
                ThreadProcClass t = new ThreadProcClass(task, eventX, obj);
                for (int i = 0; i < task; i++)
                {
                    DataTable dt = ServerModel.getInstance().dt;
                    // Console.WriteLine(dt.Rows[i]["id"].ToString() + " == 第1种写法 " + dt.Rows[i]["time"].ToString());//行集合.行【号】列【名】 
    
                    JsonData json = new JsonData();
                    json["task"] = i.ToString();
                    json["id"] = dt.Rows[i]["id"].ToString();
                    json["time"] = dt.Rows[i]["time"].ToString();
                    json["attack"] = dt.Rows[i]["attack"].ToString();
                    json["beaten"] = dt.Rows[i]["beaten"].ToString();
                    json["soldier"] = dt.Rows[i]["soldier"].ToString();
    
                    ThreadPool.QueueUserWorkItem(new WaitCallback(t.ThreadProc), new SomeState(json));
                }
                //等待事件的完成,即线程调用ManualResetEvent.Set()方法
                //eventX.WaitOne  阻止当前线程,直到当前 WaitHandle 收到信号为止。 
                eventX.WaitOne(Timeout.Infinite, true);
                Console.WriteLine("任务结束,数据存放到 list中");
                Console.WriteLine("通知 定时器");
                // 存放到 queue 中
                ServerModel.getInstance().queue.Enqueue(obj);
    
                return true;
            }

    线程中,负责 物理模拟,同时把数据放到传参过来的objs[]中

     objs[task] = json;//保持数组

    本周就先到这里。

  • 相关阅读:
    POJ2778 DNA Sequence AC自动机上dp
    codeforces732F Tourist Reform 边双联通分量
    codeforces786B Legacy 线段树优化建图
    洛谷P3588 PUS 线段树优化建图
    codeforces1301D Time to Run 模拟
    codeforces1303B National Project 二分或直接计算
    codeforces1303C Perfect Keyboard 模拟或判断欧拉路
    codeforces1303D Fill The Bag 二进制应用+贪心
    python之路——使用python操作mysql数据库
    python之路——mysql索引原理
  • 原文地址:https://www.cnblogs.com/big-zhou/p/5467979.html
Copyright © 2011-2022 走看看