非同步正則

來源:互聯網
上載者:User

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);                 }             }         }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.