j'ai une fonction, jouabilité(), qui se présente comme suit: Paramètregestionnaire applications en cours d'exécution de façon asynchrone
public void gamePlay()
{
for (int i = 0; i < 4; i++)
{
currentRound = i;
if (i == 0)
{
simulateTurns();
}
if(i == 1)
{
simulateTurns();
}
if (i > 1)
{
simulateTurns();
}
}
}
simulateTurns() utilise un gestionnaire instancié avec le Looper.getMainLooper() comme suit avant jouabilité() est jamais appelé:
thread = new Handler(Looper.getMainLooper());
simulateTurns():
public void simulateTurns()
{
currentPlayer = players[playerIndex % numPlayers];
if(currentPlayer.getPlayerID() == USER_ID) //user
{
if(!currentPlayer.hasFolded())
showUserOptions(currentRound);
else
{
playerIndex++;
simulateTurns();
}
}
else
{
hideUserOptions(0);
// Give players the option to raise, call, fold, checking (dumb for now, needs AI and user input)
// currentPlayer.getPlayerID() gets the current ID of the player
int randAction = (int) (Math.random() * 4);
String action = "";
//DEBUG Simulate game
Log.w("--------DEBUG--------", "Round: " + currentRound + " Bot: " + currentPlayer.getPlayerID() + " action: " + action + " pot: " + pot);
thread.postDelayed(new Runnable(){
public void run()
{
if(!betsEqual())
simulateTurns();
}}, 5000);
}
}
Lors du débogage du journal, tous les tours voir m pour commencer en parallèle et ensuite quelques tours du tour 3 sont enregistrés.
Comment est-ce que je peux synchroniser la boucle for avec simulateGame() afin que les rounds fonctionnent dans l'ordre?
Remarque: J'appelle également simulateTurns() sur quelques onClickListeners.
J'ai trouvé votre code assez confus. Peut-être que vous devriez envisager de le redéfinir – nandsito
Il y a un désordre, mais thread.postDelayed peut-être votre problème. Qu'est-ce que vous voulez est d'arrêter/pause/sommeil pendant 5 secondes à chaque fois, est-ce exact? Si cela, changez ce code, le gestionnaire ne fonctionne pas comme ceci. –