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#