//implement IRunnable
void CMediaPlayer::Run(void *pData)
{
	if (pData == NULL)
		WaitFunc();
	else
		PlayFunc((ThreadParam *)pData);
}
int MasterServerLogic::WaitForGameList()
{
  if(!WaitFunc(&MasterServerLogic::wait_GameListReceived, 10, "receiving game list"))
    r3dError("can't receive game list");
    
  /*
  r3dOutToLog("GameList: %d games\n", games_.size());
  for(size_t i=0; i<games_.size(); i++) {
    const GBPKT_M2C_GameData_s& g = games_[i];
    r3dOutToLog("game%d: players:%d\n", i, g.info.maxPlayers);
  }*/
    
  return 1;
}
   void wait()
    {
     ulen count[TaskCount]={};

     ulen timeout_count=0;

     for(;;)
       {
        ulen index=WaitFunc(mev);

        if( index==0 )
          {
           timeout_count++;

           continue;
          }

        index--;

        if( index<TaskCount )
          {
           count[index]++;

           asem.dec();
          }
        else
          {
           for(ulen i=0; i<TaskCount ;i++) total[i]+=count[i];

           mev.trigger(TaskCount+1);

           if( timeout_count ) Printf(Con,"timeout = #;\n",timeout_count);

           return;
          }
       }
    }