前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ManualResetEvent使用演示

ManualResetEvent使用演示

作者头像
全栈程序员站长
发布2022-09-09 11:42:00
4840
发布2022-09-09 11:42:00
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

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

代码语言:javascript
复制
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();
    }
}

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161180.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档