zoukankan      html  css  js  c++  java
  • ManualResetEvent使用Demo

    ManualResetEvent使用演示

    ManualResetEvent 允许线程通过发信号互相通信。通常,此通信涉及一个线程在其他线程进行之前必须完成的任务。
    当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时,它调用 Reset 以将 ManualResetEvent 置于非终止状态。此线程可被视为控制 ManualResetEvent。调用 ManualResetEvent 上的 WaitOne 的线程将阻止,并等待信号。当控制线程完成活动时,它调用 Set 以发出等待线程可以继续进行的信号。并释放所有等待线程。
    一旦它被终止,ManualResetEvent 将保持终止状态(即对 WaitOne 的调用的线程将立即返回,并不阻塞),直到它被手动重置。
    可以通过将布尔值传递给构造函数来控制 ManualResetEvent 的初始状态,如果初始状态处于终止状态,为 true;否则为 false。

    public class EventClient : Form
    {
        
    private Button CreateThreas;
        
    private ManualResetEvent m_Event1;
        
    private Button Signal;
        
    private Button Reset;


        
    public EventClient()
        {
            InitializeComponent();
            m_Event1 
    = new ManualResetEvent(false);
        }

        
    private void InitializeComponent()
        {
            
    // 
        }
        
        [STAThread]
        
    static void Main() 
        {
            Application.Run(
    new EventClient());
        }

        
    // 创建线程
        private void OnCreateThreads(object sender,EventArgs e)
        {
            ThreadStart threadStart 
    = new ThreadStart(Start);
            Thread thread1 
    = new Thread(threadStart);            
            thread1.Start();

            Thread thread2 
    = new Thread(threadStart);            
            thread2.Start();

        }

        
    // 线程执行体
        protected void Start()
        {
            
    // 阻塞当前线程线程
            m_Event1.WaitOne();
            
            
    int threadID = Thread.CurrentThread.GetHashCode();
            
    string caption = "Thread ID = " + threadID;
            MessageBox.Show(
    "Stopped Waiting",caption); 
        }

        
    private void OnSignal(object sender,EventArgs e)
        {
            
    // 通知被m_Event1阻塞的线程继续执行
            
    // 这里是thread1, thread2
            m_Event1.Set();
        }

        
    private void OnReset(object sender,EventArgs e)
        {
            m_Event1.Reset();
        }
    }
  • 相关阅读:
    NOIP201208同余方程
    NOIP模拟赛 最佳组合
    NOIP模拟赛 拓展
    CF1253E Antenna Coverage(DP)
    LOJ6033「雅礼集训 2017 Day2」棋盘游戏 (博弈论,二分图,匈牙利算法)
    CF582E Boolean Function(DP,状态压缩,FMT)
    CF750G New Year and Binary Tree Paths(DP)
    Codeforces Round 596 题解
    AGC008E Next or Nextnext(组合计数,神奇思路)
    ARC082E ConvexScore(神奇思路)
  • 原文地址:https://www.cnblogs.com/hcfalan/p/505217.html
Copyright © 2011-2022 走看看