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)
            {
            }
        }
    }
    
    
  • 相关阅读:
    PHP删除文件
    PHP定时执行任务
    PHP设置30秒内对页面的访问次数
    PHP抓取网页内容的几种方法
    QQ,新浪,SNS等公众平台的登录及api操作
    php,javascript设置和读取cookie
    php验证邮箱,手机号是否正确
    php自定义加密和解密
    Linux下安装启动多个Mysql
    linux-gcc 编译时头文件和库文件搜索路径
  • 原文地址:https://www.cnblogs.com/Microshaoft/p/1900836.html
Copyright © 2011-2022 走看看