我有这样的代码,在这个上下文中HandleDisconnectEventCB将在客户端有一些修改后的未保存数据并从服务器断开连接(删除网络电缆)时触发,然后它将使'clientWithLock = 0'并将从集合中删除如下所示代码。但现在问题是其他连接的客户端无法进行更改,它显示'clientWithLock'有一些数据不为零,因为它会显示另一个用户正在更新数据请等待。这里有没有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 :(得分:2)
如果你快速连续多次断开连接,那么使clientwithlock静态会让你在这里遇到各种麻烦。我建议要么让整个操作无状态,所以'ClientWithLock'作为参数传递给事件,你根据传递的所有参数操作静态函数。如果“ClientWithLock”快速连续更新两次以断开连接,则行为将非常奇怪。
或者,实例化整个类和操作,以便断开处理程序在逐个类的基础上实例化,如果让整个无状态的东西不适合你。