智能预判 (三:布局加强)

线程启动项目 修改 在 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;//保持数组

本周就先到这里。

原文地址:https://www.cnblogs.com/big-zhou/p/5467979.html