当前位置:编程学习 > C#/ASP.NET >>

C#多线程问题,请大家帮忙!

我现在要实现:9个画面来监控学生考试情况,每个考生都要考5个项目,分别是倒车入库,侧方停车,直角转弯,曲线行驶,半坡起步。每个项目都有每个项目的判断规则。比如:侧方停车,正确的路线应该是:入场信号-41--40--51--50--51--21--50--20(进入易做图)--21--51--20--50--出场信号,也就是先入场,再压4号线,再松4号线,......到最后出场。不符合正确顺序,就要相应的减分或者直接结束考试。每个学员考完本项目,本项目的显示内容和相关数据就要清空。

遇到的问题:
    1.我每个画面启用一个线程,监控用一个线程。Tcp/IP通信,接收到的receiveString,会不会比如第一个线程值是"abc",然后再进行后面的判断之前,第二个线程进来,将值改为"cde",那么我第一个线程后面的判断就会出错。
    2.关于规则的判断,我是用压线,松线的次数来判断,但是怎么定义变量,多线程同步问题。
请大家帮帮忙,帮我给个思路,谢谢! C# 多线程  TCP/IP --------------------编程问答-------------------- 你要区分传过来的数据是属于哪个线程的才行啊。区分开了,后面的监控线程才好判断。 --------------------编程问答-------------------- /// <summary>
        /// 接收客户端连接
        /// </summary>
        private void ListenClientConnect()
        {
            TcpClient newClient = null;
            while (true)
            {
                try
                {
                    newClient = myListener.AcceptTcpClient();
                }
                catch
                {
                    //当单击‘停止监听’或者退出此窗体时 AcceptTcpClient() 会产生异常,因此可以利用此异常退出循环
                    break;
                }
                IPAddress ip = ((IPEndPoint)newClient.Client.RemoteEndPoint).Address;

                //每接收一个客户端连接,就创建一个对应的线程循环接收该客户端发来的信息;
                int carnum = GetCarNumberByIP(ip);
                int iptype = GetIpTypeByIP(ip);
                User user = new User(ip, newClient, carnum, iptype);
                //int carnumber = GetCarNumber(ip, ipcar);
                //TestStudent testStudent = new TestStudent(carnum);
                //testStudentlist.Add(testStudent);
                Thread threadReceive = new Thread(ReceiveData);
                threadReceive.Start(user);
                userList.Add(user);
            }
        }
        //byte[] keySign;
        /// <summary>
        /// 处理接收的客户端信息
        /// </summary>
        /// <param name="userState">客户端信息</param>
        private void ReceiveData(object userState)
        {
            User user = (User)userState;
            TcpClient client = user.client;
            IPAddress ip = user.ip;
            while (isNormalExit == false)
            {
                try
                {
                    int bytesRead = user.br.Read(user.keySign, 0, user.keySign.Length);
                    string receiveString = "";
                    for (int i = 0; i < bytesRead; i++)
                    {
                        receiveString = receiveString + user.keySign[i].ToString("X2");
                    }
                    int num = GetCarNumberByIP(user.ip);
                    if (user.num > 0)
                    {
                        DealCar(receiveString,num);
                        client.Close();
                    }
                    else
                        MessageBox.Show("没有人!");
                }
                catch (Exception)
                {
                    if (isNormalExit == false)
                    {
                        RemoveUser(user);
                    }
                    return;
                }
            }
        }
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,