为什么变量值异常变化
我有这样的代码,在这种情况下,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;
如果快速连续发生多个断开连接,使clientwithlock静态会导致您所有的头痛。我建议要么使整个操作成为无状态,所以'ClientWithLock'作为参数传递给事件,并且基于传递的所有参数来操作静态函数。如果'ClientWithLock'被连续更新两次以断开连接,行为将非常奇怪。
或者,实例化整个类和操作,以便断开处理程序在类的基础上实例化,如果整个事物无状态的话不适合你。
我没有得到你的意思,使整个操作无状态 – shanethomson11 2011-06-09 10:29:16
有: 私人静态int clientWithLock = 0; 作为静态,正在为类添加一个状态,clientWithLock在所有实例中只能有1个值(如果该类是非静态的,如果该类是静态的,那么该类的唯一实例,可以只有一个并发值为clientWithLock)通过将这个参数作为你的事件而不是静态变量,你可以从类中移除'State',在逐个事件的基础上使用clientWithLock,这更有效率,我怀疑会纠正你所看到的奇怪行为。 – JTrott 2011-06-09 10:37:06
这里变量“clientwithlock”和事件HandleDisconnectEven正在类的公共类SPURTServer“未来 – shanethomson11 2011-06-09 10:39:34
请更新您的问题,并在您的句子中使用一些标点符号。它很难读取它... – 2011-06-09 10:13:15