我有一个时间问题,不知道如何解决。
在我的第二个循环Displaycard中,它循环,每个连接都启动一个名为cLookAtCardConnection
的类。这个类有时会设置标志mPlayerList.GetNextFlag()
,从而导致循环退出,程序进入第一个循环,Turn card over,它调用类cLookAtCardConnection
问题是,在设置了mPlayerList.GetNextFlag()
之后,下一对连接仍在同一个循环中,并在设置了标志并进入调用cLookAtCardConnection
的循环时调用类cLookAtCardConnection
,而不是(退出?)循环。
为什么在设置了标志之后退出循环会有延迟?
while( lBoard.Next()==true)
{
mPlayerList.Next();
// inner loop wait for all players
/////////////////////////////////////////////////////////////////////////////
// turn one card over
mPlayerList.WaitForAllPlayers();
do
{
do{
r=GetClient();
switch(r)
{
case 0: return; // exitvon a very bad error
}
} while(r==2);// loop if it was a timeout
cTurnCardOvrerConnection thread = new cLookAtCardConnection("thread3", connection, mPlayerList, mPlayersMessages, lBoard);
} while( mPlayerList.AllPlayersFinished()==false);// end while
//////////////////////////////////////////////////////////////////////////
// Display card -LOOK AT CARD
mPlayerList.ClearNextFlag();
mPlayerList.WaitForAllPlayers();
do
{
System.out.println(Thread.currentThread()+": Display card r");
do{
r=GetClient();
switch(r)
{
case 0: return; // exitvon a very bad error
}
} while(r==2);// loop if it was a timeout
cLookAtCardConnection thread = new cLookAtCardConnection("thread3", connection, mPlayerList, mPlayersMessages, lBoard);
// after this flag is set the next couple connectons are still in this loop???
} while( mPlayerList.GetNextFlag()==false);// end while
} // reloop game board
} // loop forever
// System.out.println("--------- Eit player loop ------------------- r");
} catch(IOException ec)
{
System.out.println(ec.getMessage());
}
} // end run
} // end of class
您可能需要设置一个synchronized
块,以便do-while
循环中的代码一次只能由单个线程访问。