zoukankan      html  css  js  c++  java
  • EventWaitHandle

    在查资料的过程中,我突然想到一个类:EventWaitHandle,也就是本文的主角。

      这个类通过在线程之间设置信号量,可以非常方便的控制线程运行的顺序。具体代码如下:

      首先全局申明:

     EventWaitHandle myHandle = new EventWaitHandle(false, EventResetMode.ManualReset);  //将信号状态置为非终止,使用手动重置

      其次在大数据处理的函数开始加上

     myHandle.Reset();//让其他需要等待的线程阻塞

      末尾加上:

    myHandle.Set();  //允许其他等待的线程运行

      具体形式如下:

     private void DealDataInformation(ListView listview,string fileName,EnumX enums)
    {
    myHandle.Reset();//让其他需要等待的线程阻塞
        ....................
    myHandle.Set(); //允许其他等待的线程运行
    }

      其中Reset方法可以让本函数进行处理,而让其他在线程上的未接收到信号量的函数进入阻塞状态,而Set方法则是释放信号量,以便通知阻塞线程当前处理结束,可以继续进行。

      那么怎么控制哪些函数需要阻塞呢? 很简单:

      直接在函数的入口处加上:

    private void ColorTheResultAsync(EnumX enums,ListView listview)
    {
    myHandle.WaitOne(); //处于等待状态,直到收到Set的信号
    .........
    }
  • 相关阅读:
    程序员偷偷深爱的9个不良编程习惯
    JQuery实现放大镜
    ACM1995
    liubo.im
    Linux中的一些点
    EPOLL使用详解
    Elays'Blog
    c#数据库解析
    codeforces #332 div 2 D. Spongebob and Squares
    类型
  • 原文地址:https://www.cnblogs.com/gosteps/p/5289885.html
Copyright © 2011-2022 走看看