开30个线程,采用UDP方式,同时向30台PLC发送指令读取数据,然后接受数据判断类型写入到SQL,线程里面使用的是while (ture) 循环方式,现在经常会出现循环停止的现象,循环体里面加的try也不报任何异常,有人知道什么原因吗

解决方案 »

  1.   

    从逻辑上看,while死循环本身是不会自己中止的。所以要:1.看循环中具体代码,2.看线程开启方式。
      

  2.   


    1.不工作不一定是循环停止了,
    也有可能是循环内由于某些原因被阻塞了
    比如死锁。
    打出运行日志可能是个比较便捷的方法。
    2.关注下系统资源占用,
    先排除有无Handle之类的资源泄露的情况。
      

  3.   

    谢谢各位,已经解决了,原因是长时间向PLC发送指令,偶尔会出现接收不到PLC返回值的情况,我在接受数据是加了一个判断条件
            public void Msg(string b, EndPoint RemotePoint, Socket mySocket, out string LH)
            {
                abc.Functioin1(b, out byte[] oun);
                mySocket.SendTo(oun, oun.Length, SocketFlags.None, RemotePoint);//改
                Thread.Sleep(50);
                if (mySocket.Available == 0)
                {
                    LH = "";
                }

                else
                {
                    byte[] Qata = new byte[1024];
                    int Qrle2 = mySocket.ReceiveFrom(Qata, ref RemotePoint);//改
                    LH = Encoding.Default.GetString(Qata, 0, Qrle2);
                }        }