0001 void simulate( Rank wins, Rank servTime ) { //按指定窗口数、服务总时间模拟银行业务 0002 Queue<Customer>* window = new Queue<Customer>[wins]; //为每一窗口创建一个队列 0003 for ( Rank now = 0; now < servTime; now++ ) { //在下班之前,每隔一个单位时间 0004 if ( rand() % ( 1 + wins ) ) { //新顾客以wins/(wins + 1)的概率到达 0005 Customer c ; c.time = 1 + rand() % 98; //新顾客到达,服务时长随机确定 0006 c.winId = bestWindow( window, wins ); //找出最佳(最短)的服务窗口 0007 window[c.winId].enqueue( c ); //新顾客加入对应的队列 0008 } 0009 for ( Rank i = 0; i < wins; i++ ) //分别检查 0010 if ( !window[i].empty() ) //各非空队列 0011 if ( -- window[i].front().time <= 0 ) //队首顾客的服务时长减少一个单位 0012 window[i].dequeue(); //服务完毕的顾客出列,由后继顾客接替 0013 } //for 0014 delete [] window; //释放所有队列(此前,~List()会自动清空队列) 0015 }