a29343539
2018-09-18 19:23
采纳率: 80%
浏览 715

求C#,简单范例:当一线程执行PPPOE重拨,其他线程,等待完成拨号后再做唤醒

三个线程是一样的代码,执行范围各不同。
都有因为某条件,则执行拨号,如何当触发时,
让其他线程作等待,等待PPPOE拨号完成,再唤醒继续执行。
而不做重复拨号,导致BUG。
请教简单点的范例,谢谢回答。
WinForm 菜鳥

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 发个福福 2018-09-19 01:59
    已采纳

    其他线程等待的话 挂起suspend函数被否决 所以用全局信号好些
    一楼说的对 也可以这样:条件触发时,把拨号任务交给其中一个线程,线程一得到信号,当前就没有拨号任务了
    //当前是否有拨号任务 条件触发时变为true 线程进行入处理时变为false
    private bool havepppoeEvent = false;

        //触发条件
        private void button1_Click(object sender, EventArgs e)
        { Thread th1 = new Thread(th1Proc);
            th1.Start();
            Thread th2 = new Thread(th2Proc);
            th2.Start();
            Thread th3 = new Thread(th3Proc);
            th3.Start();
            havepppoeEvent = true;
        }
    
        private void th1Proc()
        {
            while (true)
            {
                if (!havepppoeEvent)
                {
                    Thread.Sleep(10);
                    continue;
                }
                else//进行处理
                {
                    havepppoeEvent = false;
    
                    //线程1执行操作
                    MessageBox.Show("i am th1");
                }
            }
        }
        private void th2Proc()
        {
            while (true)
            {
                if (!havepppoeEvent)
                {
                    Thread.Sleep(10);
                    continue;
                }
                else
                {
                    havepppoeEvent = false;
    
                    //线程2执行操作
                    MessageBox.Show("i am th2");
                }
            }
        }
        private void th3Proc()
        {
            while (true)
            {
                if (!havepppoeEvent)
                {
                    Thread.Sleep(10);
                    continue;
                }
                else
                {
                    havepppoeEvent = false;
    
                    //线程3执行操作
                    MessageBox.Show("i am th3");
                }
            }
        }
    
    打赏 评论
  • 全局变量开关就行了,拨号时设置为true,其他2个线程判断变量为true就continue不执行代码逻辑

    拨号成功后设置开关为false

    打赏 评论

相关推荐 更多相似问题