示例#1
0
        void WorkThread()
        {
            isRuning        = true;
            isWorkThreadRun = true;
            Logs.Info("Logic thread {0} start.", taskName_);

            var start = OneServer.NowTime;

            while (isRuning || taskList.Count > 0)
            {
                ITaskT <T> task;
                if (taskList.TryDequeue(out task))
                {
                    lastTask = task;
                    watch.Restart();
                    bool isError = false;
                    try
                    {
                        task.Execute();
                    }
                    catch (Exception ex)
                    {
                        Logs.Error("{0} run task fail.", taskName_, ex);
                        isError = true;
                    }
                    watch.Stop();

                    task.Parent = this;

                    var timeTicks = watch.ElapsedTicks;

                    task.TaskProfile.Append(timeTicks, isError);
                    task.WriteLog(timeTicks, isError);
                    task.Release();

                    var now = OneServer.NowTime;
                    if (now.Ticks - start.Ticks > 10000 * 1000 * 10)
                    {
                        start = now;
                        NetTaskLogWriter.Flush();
                        ActionTaskLogWriter.Flush();
                    }

                    lastTask = null;
                }
                else
                {
                    //  队列里没任务,则让线程先休息一小会
                    Thread.Sleep(1);
                }
            }

            NetTaskLogWriter.Flush();
            ActionTaskLogWriter.Flush();

            isWorkThreadRun = false;
        }
示例#2
0
 /// <summary>
 /// 添加一个任务
 /// </summary>
 /// <param name="task"></param>
 public void AppendTask(ITaskT <T> task)
 {
     taskList.Enqueue(task);
 }