博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于AutoResetEvent的使用
阅读量:6914 次
发布时间:2019-06-27

本文共 1346 字,大约阅读时间需要 4 分钟。

AutoResetEvent 允许线程通过发信号互相通信。通常,此通信涉及线程需要独占访问的资源。

线程通过调用 AutoResetEvent 上的 WaitOne 来等待信号。如果 AutoResetEvent 处于非终止状态,则该线程阻塞,并等待当前控制资源的线程

通过调用 Set 发出资源可用的信号。

调用 SetAutoResetEvent 发信号以释放等待线程。AutoResetEvent 将保持终止状态,直到一个正在等待的线程被释放,然后自动返回非终止

状态。如果没有任何线程在等待,则状态将无限期地保持为终止状态。

可以通过将一个布尔值传递给构造函数来控制 AutoResetEvent 的初始状态,如果初始状态为终止状态,则为 true;否则为 false

通俗的来讲只有等myResetEven.Set()成功运行后,myResetEven.WaitOne()才能够获得运行机会;Set是发信号,WaitOne是等待信号,只有发了信号,

等待的才会执行。如果不发的话,WaitOne后面的程序就永远不会执行。

定义委托线程:   

public delegate void AsyncDelegate();

 try

        {
            AsyncDelegate dlgt1 = new AsyncDelegate(GetPolicyInfo);
            IAsyncResult ar1 = dlgt1.BeginInvoke(null, null);
            AsyncDelegate dlgt2 = new AsyncDelegate(GetFDPriceInfo);
            IAsyncResult ar2 = dlgt2.BeginInvoke(null, null);
            AsyncDelegate dlgt3 = new AsyncDelegate(LiuKouQuery);
            IAsyncResult ar3 = dlgt3.BeginInvoke(null, null);
            AsyncDelegate dlgt4 = new AsyncDelegate(PolicyCoordinationQuery);
            IAsyncResult ar4 = dlgt4.BeginInvoke(null, null);
            ar1.AsyncWaitHandle.WaitOne();
            dlgt1.EndInvoke(ar1);
            ar2.AsyncWaitHandle.WaitOne();
            dlgt2.EndInvoke(ar2);
            ar3.AsyncWaitHandle.WaitOne();
            dlgt3.EndInvoke(ar3);
            ar4.AsyncWaitHandle.WaitOne();
            dlgt4.EndInvoke(ar4);
            CombinePolicyAndPrice();
        }
        catch
        {
        }
        finally
        {
            AutoResetEvent are = (AutoResetEvent)o;
            are.Set();
        }

转载于:https://www.cnblogs.com/xingvskong11/archive/2013/01/04/AutoResetEvent.html

你可能感兴趣的文章
Apache下的子目录以及相关指令的说明
查看>>
jqury 插件
查看>>
通过计算机名访问linux
查看>>
模式识别开发之项目---计算机视觉目标检测的框架与过程
查看>>
关于rc.local
查看>>
网络协议之ftp---ftp 协议详解
查看>>
Java——UDP
查看>>
[RxJS] Transformation operator: bufferToggle, bufferWhen
查看>>
Tdrag
查看>>
No goals have been specified for this build 解决方案
查看>>
netty深入学习之中的一个: 入门篇
查看>>
Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件
查看>>
基于HTTP 协议认证介绍与实现
查看>>
(原創) 如何寫一個加法器? (C/C++) (SystemC) (IC Design)
查看>>
Npoi导入导出Excel操作
查看>>
说说接口封装
查看>>
TCP/IP建立连接与终止连接
查看>>
asp.net 中页面缓存 ,数据源缓存,自定义缓存
查看>>
[九度][何海涛] 翻转单词顺序
查看>>
微信相关的应用
查看>>