1
我有一个计时问题,我不知道如何解决它。我的纸牌游戏服务器中的Java线程计时问题
在我的第二个循环显示卡中,它循环,每个连接开始一个名为cLookAtCardConnection
的类。这个类有时会设置标志mPlayerList.GetNextFlag()
,从而导致循环退出,并使程序进入到第一循环,打开卡上,它调用类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
重新命名为'cLookAtCardConnection'的类以及诸如'WaitForAllPlayers()'等方法。 1)请学习常用的Java术语并使用它。 2)一个名为'cLookAtCardConnection'的类有一个不好的设计气味。类名应该是名词(专有名词),而不是动词(做'看'等词)。 – 2012-01-29 07:21:09
另外,也许你应该考虑改进代码中的评论 - “退出一个非常糟糕的错误”似乎不是一个有用的评论 – Dawood 2012-01-29 07:23:54