zoukankan      html  css  js  c++  java
  • Wake WaitHandle AsycProcessor AutoResetEvent

    
    namespace Microshaoft
    {
        using System;
        using System.Threading;
        public class WakeProcessor<TData>
        {
            private delegate void ProcessCaller(AutoResetEvent wait, TData data);
            public delegate void WaitEventHandler(WakeProcessor<TData> sender, TData data);
            public event WaitEventHandler OnWaitOneTimeout;
            public event WaitEventHandler OnWaitOneWake;
            public event WaitEventHandler OnWaitComplete;
            private int _waitOneTimeoutSeconds = 0;
            private int _waitTimeoutMinutes = 0;
            public WakeProcessor
                            (
                                AutoResetEvent waitHandle
                                , int waitOneTimeoutSeconds
                                , int waitTimeoutMinutes
                                , TData data
                            )
            {
                BeginWaiting
                        (
                            waitHandle
                            , waitOneTimeoutSeconds
                            , waitTimeoutMinutes
                            , data
                        );
            }
            public void BeginWaiting
                                (
                                    AutoResetEvent waitHandle
                                    , int waitOneTimeoutSeconds
                                    , int waitTimeoutMinutes
                                    , TData data
                                )
            {
                _waitOneTimeoutSeconds = waitOneTimeoutSeconds;
                _waitTimeoutMinutes = waitTimeoutMinutes;
                ProcessCaller handler = new ProcessCaller(Process);
                //AsyncCallback callback = new AsyncCallback(ProcessedCallback);
                //IAsyncResult result =
                handler.BeginInvoke(waitHandle, data , null, null);
            }
            private void Process(AutoResetEvent wait, TData data)
            {
                DateTime beginTime = DateTime.Now;
                while (DateTime.Now.Subtract(beginTime).TotalSeconds <= _waitTimeoutMinutes * 60)
                {
                    bool r = wait.WaitOne(_waitOneTimeoutSeconds * 1000);
                    if (r)
                    {
                        if (OnWaitOneWake != null)
                        {
                            OnWaitOneWake(this, data);
                        }
                    }
                    else
                    {
                        if (OnWaitOneTimeout != null)
                        {
                            OnWaitOneTimeout(this, data);
                        }
                    }
                    //if (r)
                    //{
                    //    break;
                    //}
                }
                //if (!r)
                {
                    if (OnWaitComplete != null)
                    {
                        OnWaitComplete(this, data);
                    }
                }
            }
            private void ProcessedCallback(IAsyncResult result)
            {
            }
        }
    }
    
    
  • 相关阅读:
    test
    flash链接需要后台调用时的插入flash方法
    js验证码倒计时
    设置Cookie
    用in判断input中的placeholder属性是否在这个对象里
    常用的正则表达式规则
    webApp添加到iOS桌面
    .substr()在字符串每个字母前面加上一个1
    PAT 甲级1001 A+B Format (20)(C++ -思路)
    PAT 1012 数字分类 (20)(代码+测试点)
  • 原文地址:https://www.cnblogs.com/Microshaoft/p/1900836.html
Copyright © 2011-2022 走看看