プロパティーはIList <IMyPlayer> Players {}
です。これはゲームサーバーが呼び出されるたびに同期します。私はforループでカウントを制限したときにすべてのインクリメントが更新されるかどうかを知る必要があります。理由は、私はこのループ中にプレイヤーがゲームを離れることを心配しているからです。プロパティが呼び出されるたびにその要素を更新するのは安全ですか?
編集これはシングルスレッドアプリケーションです。
public static IList <IMyPlayer> Players
{
get
{
playersField.Clear(); //GetPlayers() just adds without overwriting so list must be cleared every time.
if (Debugging == false)
{
MyAPIGateway.Multiplayer.Players.GetPlayers (playersField); //everytime the project needs to see all players, this will update. Little heavier on performance but its polymorphic.
}
return playersField.AsReadOnly();
}
}
for (int i = 0; i < AttendanceManager.Players.Count; i++)
{
if (AttendanceManager.Players[i].SteamUserId == MyAPIGateway.Multiplayer.MyId)
{
//do stuff
}
}
複数のスレッドを使って作業している場合、 'Players'リストの周りに' lock'があるとこれを防ぐことができます – NtFreX
こんにちはこれはシングルスレッドアプリケーションです。 –
@ Dr.FreとSamuel:最後のループでは、Players.Countがキャッシュされていても、この行: 'AttendanceManager.Players [i] .SteamUserId'はすべてのループ反復でゲッターを呼び出し、呼び出しますClear、GetPlayers、およびAsReadOnlyを繰り返します。それは非常に悪い考えです。通常。 – quetzalcoatl