为什么变量值异常变化

为什么变量值异常变化

问题描述:

我有这样的代码,在这种情况下,HandleDisconnectEventCB将触发,当客户端有一些修改没有保存的数据和从服务器断开(删除网线),然后它会使'clientWithLock = 0 '并将从下面显示的代码中删除集合。但现在的问题是其他连接的客户端无法更改,它显示出“clientWithLock”有一些数据不为零,因为它会显示其他用户正在更新数据请wait.Is有任何badlogic回事为什么变量值异常变化

private static int clientWithLock = 0; 

static private void HandleDisconnectEventCB(SPD.SPD_serverLocationType loc, 
              string server, int clientId, 
              object passback) 
{ 
    // Remove lock if necessary 
    if (clientWithLock == clientId) clientWithLock = 0; 

    // Remove client from client list and end replicated display sessions 
    for (int i = 0; i < clients.Count; i++) 
    { 
     SPURTclient sc = (SPURTclient)clients[i]; 
     if (sc.ClientId == clientId) 
     { 
      . 
      . 
      clients.RemoveAt(i); 
      break; 
+0

请更新您的问题,并在您的句子中使用一些标点符号。它很难读取它... – 2011-06-09 10:13:15

如果快速连续发生多个断开连接,使clientwithlock静态会导致您所有的头痛。我建议要么使整个操作成为无状态,所以'ClientWithLock'作为参数传递给事件,并且基于传递的所有参数来操作静态函数。如果'ClientWithLock'被连续更新两次以断开连接,行为将非常奇怪。

或者,实例化整个类和操作,以便断开处理程序在类的基础上实例化,如果整个事物无状态的话不适合你。

+0

我没有得到你的意思,使整个操作无状态 – shanethomson11 2011-06-09 10:29:16

+0

有: 私人静态int clientWithLock = 0; 作为静态,正在为类添加一个状态,clientWithLock在所有实例中只能有1个值(如果该类是非静态的,如果该类是静态的,那么该类的唯一实例,可以只有一个并发值为clientWithLock)通过将这个参数作为你的事件而不是静态变量,你可以从类中移除'State',在逐个事件的基础上使用clientWithLock,这更有效率,我怀疑会纠正你所看到的奇怪行为。 – JTrott 2011-06-09 10:37:06

+0

这里变量“clientwithlock”和事件HandleDisconnectEven正在类的公共类SPURTServer“未来 – shanethomson11 2011-06-09 10:39:34