📄 racer.java
字号:
/*
This file is part of the PolePosition database benchmark
http://www.polepos.org
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public
License along with this program; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA. */
package org.polepos.framework;
import java.util.*;
import org.polepos.reporters.*;
public class Racer implements Runnable {
/**
* By setting the XSS_THREAD variable to true Poleposition can be
* configured to run in a dedicated thread to allow -Xss settings.
* see: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4689767
*/
private static final boolean XSS_THREAD = false;
private final List<Circuit> circuits;
private final List<Team> teams;
public Racer(List<Circuit> circuits, List<Team> teams) {
this.circuits = circuits;
this.teams = teams;
if(! XSS_THREAD){
run();
return;
}
new Thread(this).start();
synchronized (this) {
try {
this.wait(Integer.MAX_VALUE);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void run() {
synchronized (this) {
long start = System.currentTimeMillis();
Reporter[] reporters = new Reporter[] { new PlainTextReporter(), new PDFReporter(),
new CSVReporter(), new HTMLReporter()};
for (Reporter reporter : reporters) {
reporter.startSeason();
}
for (Circuit circuit : circuits) {
System.out.println("* Racing on " + circuit.name());
for (Reporter reporter : reporters) {
reporter.sendToCircuit(circuit);
}
for (Team team : teams) {
Driver[] drivers = team.nominate(circuit);
if (drivers == null || drivers.length == 0) {
for (Reporter reporter : reporters) {
reporter.noDriver(team, circuit);
}
} else {
for (Driver driver : drivers) {
for (Car car : team.cars()) {
if (car != null) {
System.out.println("** On track: " + team.name() + "/"
+ car.name());
TurnSetup[] setups = circuit.lapSetups();
TurnResult[] results = circuit.race(team, car, driver);
for (Reporter reporter : reporters) {
reporter.report(team, car, setups, results);
}
}
}
}
}
}
}
for (Reporter reporter : reporters) {
reporter.endSeason();
}
long stop = System.currentTimeMillis();
long duration = stop - start;
System.out.println("\n****************************************************");
System.out.println("The F1 season was run O.K. without lethal accidents.");
System.out.println("****************************************************\n");
System.out.println("Overall time taken: " + duration + "ms\n");
System.out.println("All output from this benchmark run can be found in:");
System.out.println(reporters[0].path());
this.notify();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -