zoukankan      html  css  js  c++  java
  • C# 队列

    1.队列类

        public class MessageHandlerQueue : Queue<object>
        {
            //private Queue<object> messageQueue = new Queue<object>();
            private Thread handleThread = null;
            private bool workFlag = true;
            //private static MessageHandler _instance;
            private object m_lock = new object();
            private Action<Object> HandleFun = null;
    
            /// <summary>
            /// Initializes a new instance of the <see cref="MessageHandlerQueue"/> class.
            /// </summary>
            /// <param name="fun">消息处理函数</param>
            public MessageHandlerQueue(Action<Object> fun)
            {
                HandleFun = fun;
            }
    
            /// <summary>
            /// 线程执行函数,主要是调用
            /// </summary>
            private void HandleMessage()
            {
                while (workFlag)
                {
                    if (Count > 0)
                    {
                        try
                        {
                            var msg = new object();
                            lock (this.m_lock)
                            {
                                //LogHelper.GetLog("Server").Info("信息列表等待处理消息数:" + Count);
                                Console.WriteLine("信息列表等待处理消息数:" + Count);
                                msg = Dequeue();
                            }
                            HandleFun(msg);
                        }
                        catch (Exception ex)
                        {
                            //LogHelper.GetLog("Server").Error(ExceptionHelper.GetExceptionDesc(ex));
                            Console.WriteLine(ex.ToString());
                        }
                    }
                    else
                    {
                        Thread.Sleep(100);
                    }
                }
            }
    
            public void AppendMessage(object message)
            {
                lock (this.m_lock)
                {
                    Enqueue(message);
                }
            }
    
            public void Start()
            {
                if (handleThread == null)
                {
                    handleThread = new Thread(HandleMessage);
                }
                if (!handleThread.IsAlive)
                {
                    handleThread.Start();
                    workFlag = true;
                }
            }
    
            public void Stop()
            {
                workFlag = false;
            }
        }
    View Code

    2.队列类使用

     public MessageHandlerQueue _msgHdl;
            public MessageHandlerQueue MsgHandle
            {
                get
                {
                    if (_msgHdl == null)
                    {
                        _msgHdl = new MessageHandlerQueue(ThreadFun);
                        _msgHdl.Start();
                        return _msgHdl;
                    }
                    else
                        return _msgHdl;
                }
                private set
                {
                    _msgHdl = value;
                }
            }
    View Code
  • 相关阅读:
    3728 联合权值[NOIP 2014 Day1 T2]
    关于深度优先遍历图的非递归算法的一个讨论
    图的遍历递归和非递归实现【整理自网络】
    CSS 居中布局
    css怎样让背景充满整个屏幕
    关于html,body{height:100%}的解释
    4103:踩方格
    2287 火车站
    平面分割问题
    蜜蜂路线
  • 原文地址:https://www.cnblogs.com/mathyk/p/10996378.html
Copyright © 2011-2022 走看看