zoukankan      html  css  js  c++  java
  • 异步正则

    private MatchCollection mc;         private int _timeout;        // 最长休眠时间(超时),毫秒         private int sleepCounter;         private int sleepInterval;    // 休眠间隔,毫秒         private bool _isTimeout;

            public bool IsTimeout         {             get { return this._isTimeout; }         }

            public AsynchronousRegex(int timeout)         {             this._timeout = timeout;             this.sleepCounter = 0;             this.sleepInterval = 100;             this._isTimeout = false;

                this.mc = null;         }

            public MatchCollection Matchs(Regex regex, string input)         {             Reg r = new Reg(regex, input);             r.OnMatchComplete += new Reg.MatchCompleteHandler(this.MatchCompleteHandler);

                Thread t = new Thread(new ThreadStart(r.Matchs));             t.Start();

                this.Sleep(t);

                t = null;             return mc;         }

            private void Sleep(Thread t)         {             if (t != null && t.IsAlive)             {                 Thread.Sleep(TimeSpan.FromMilliseconds(this.sleepInterval));                 this.sleepCounter++;                 if (this.sleepCounter * this.sleepInterval >= this._timeout)                 {                     t.Abort();                     this._isTimeout = true;                 }                 else                 {                     this.Sleep(t);                 }             }         }

            private void MatchCompleteHandler(MatchCollection mc)         {             this.mc = mc;         }

            class Reg         {             internal delegate void MatchCompleteHandler(MatchCollection mc);             internal event MatchCompleteHandler OnMatchComplete;

                public Reg(Regex regex, string input)             {                 this._regex = regex;                 this._input = input;             }

                private string _input;             public string Input             {                 get { return this._input; }                 set { this._input = value; }             }

                private Regex _regex;             public Regex Regex             {                 get { return this._regex; }                 set { this._regex = value; }             }

                internal void Matchs()             {                 MatchCollection mc = this._regex.Matches(this._input);                 if (mc != null && mc.Count > 0)    // 这里有可能造成cpu资源耗尽                 {                     this.OnMatchComplete(mc);                 }             }         }

  • 相关阅读:
    UESTC_秋实大哥搞算数 2015 UESTC Training for Data Structures<Problem N>
    UESTC_秋实大哥与线段树 2015 UESTC Training for Data Structures<Problem M>
    UESTC_Rain in ACStar 2015 UESTC Training for Data Structures<Problem L>
    UESTC_Sliding Window 2015 UESTC Training for Data Structures<Problem K>
    UESTC_Islands 2015 UESTC Training for Data Structures<Problem J>
    UESTC_秋实大哥下棋 2015 UESTC Training for Data Structures<Problem I>
    UESTC_秋实大哥打游戏 2015 UESTC Training for Data Structures<Problem H>
    ActiveX控件
    MFC ListControl用法
    c++串口上位机调试助手的总结和部分代码
  • 原文地址:https://www.cnblogs.com/i80386/p/2260176.html
Copyright © 2011-2022 走看看