首页 新闻 会员 周边 捐助

关于线程互斥的一个问题,各位帮忙看下……

1
悬赏园豆:20 [已解决问题] 解决于 2012-09-25 11:21

先大致写下代码

  for (int i = 0; i < list.Count; i++)        // 循環啟動線程
                {
                    DeviceClass dc = (DeviceClass)list[i];
                                     
                        sendthread[i] = new Thread(new ThreadStart(dc.SendMessage));       // 調用設備管理類(DeviceManager)發送短信方法
                        sendthread[i].IsBackground = true;
                        sendthread[i].Start();
                   
                }


下面是sendmessage方法

public void SendMessage()
{
            while(true)
            {
                if (IsReged())
                 {
                      ........
                  }
           Thread.Sleep(5000);
} }


下面IsReged方法

 private bool IsReged()
        {
            #region 是否注册
            bool regFlag = true;
            try
            {
                Reg reg = new Reg();             

if (!reg.state)
                {
                    if (degree < 10)
                    {
                        reg.degree = degree;
                        reg.Save();
                    }
                    else
                    {
                        SmsLogger.GetLogger().AppendLog("ERROR", "對不起,您的系統還沒有注冊,只能試用10次,請立即注冊");
                        regFlag = false;
                    }
                }
                return regFlag;
            }
            catch (Exception ex)
            {
                SmsLogger.GetLogger().AppendLog("ERROR ", "對不起,驗證註冊信息失敗!" + ex.Message);
                return false;
            }

 

程序要求:只能有一个线程进入IsReged方法,当某个线程在执行IsReged方法,其他线程等待,求各位大侠帮忙修改下,谢谢

冰封一夏的主页 冰封一夏 | 初学一级 | 园豆:13
提问于:2012-06-06 15:10
< >
分享
最佳答案
0

使用manualresetevent来通过设置信号量进行

如果阻塞,请使用 reset方法,释放请使用set方法  在其他的方法中使用waitone方法,这个是在IsReged()方法内部使用

 

还有一个就是使用Lock, 进入IsReged后,Lock一个未声明变量即可。

收获园豆:15
程序诗人 | 菜鸟二级 |园豆:313 | 2012-06-07 12:56

能否说的详细点,不明白

冰封一夏 | 园豆:13 (初学一级) | 2012-06-12 16:08
程序诗人 | 园豆:313 (菜鸟二级) | 2012-09-26 00:15
其他回答(1)
0
收获园豆:5
无之无 | 园豆:5095 (大侠五级) | 2012-06-06 15:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册