私は通常、シミュレーションという名前のクラスを使用して時間を進めます。私はC++にはありませんが、Javaでスレッド化を実行しました。これは、時間を進め、スケジュールに従ってイベント(または計画された時間のランダムイベント)をアクティブ化するものです。これを利用してC++に変換するか、オブジェクト指向の実装がどのようになっているのかを確認するために使用できます。
package adventure;
public class Simulation extends Thread {
private PriorityQueue prioQueue;
Simulation() {
prioQueue = new PriorityQueue();
start();
}
public void wakeMeAfter(Wakeable SleepingObject, double time) {
prioQueue.enqueue(SleepingObject, System.currentTimeMillis() + time);
}
public void run() {
while (true) {
try {
sleep(5);
if (prioQueue.getFirstTime() <= System.currentTimeMillis()) {
((Wakeable) prioQueue.getFirst()).wakeup();
prioQueue.dequeue();
}
} catch (InterruptedException e) {
}
}
}
}
これを使用するには、インスタンス化してオブジェクトを追加するだけです。
` Simulation sim = new Simulation();
// Load images to be used as appearance-parameter for persons
Image studAppearance = loadPicture("Person.gif");
// --- Add new persons here ---
new WalkingPerson(sim, this, "Peter", studAppearance);