Content-Type: |
text/plain; charset="us-ascii" |
Date: |
Thu, 5 Sep 2013 12:10:19 -0400 |
Reply-To: |
|
Subject: |
|
From: |
|
Content-Transfer-Encoding: |
8bit |
In-Reply-To: |
|
MIME-Version: |
1.0 (Apple Message framework v1085) |
Sender: |
|
Parts/Attachments: |
|
|
No, the schedule is properly initialized. But the very first thing the start() method does is clear out the schedule. So here's what your program does.
1. Create the schedule, then insert the Steppable to be stepped, all in the constructor.
2. Call start(), which deletes the Steppable.
3. Step the schedule, which terminates immediately because it now has nothing in it.
You should be calling start(), then inserting steppables (typically in an overridden start() method), then stepping the schedule.
Sean
On Sep 5, 2013, at 11:55 AM, F Witmer wrote:
> I am having trouble scheduling events in the SimState. I'm guessing I'm missing something basic here -- perhaps the schedule has to be initialized? When I add steppable agents or anonymous steppable objects, the step function does not get called. Below is a simplified version to show the problem. Using doLoop() or calling schedule.step() myself, the print statement in masterStep() does not execute.
>
> This setup seems to mirror that in the tutorials and documentation, so I'm not sure what I'm missing here.
>
> -frank
>
>
> package schedPackage;
>
> import sim.engine.SimState;
> import sim.engine.Steppable;
>
> public class ScheduleTest extends SimState {
> private static final long serialVersionUID = 1L;
>
> public ScheduleTest(long seed) {
> super(seed);
>
> Steppable masterStep = new Steppable() {
> private static final long serialVersionUID = 1;
> @Override
> public void step(SimState state) {
> masterStep();
> }
> };
> if (schedule.scheduleRepeating(masterStep) == null) {
> System.out.println("ERROR: scheduling of masterStep failed");
> }
>
> }
>
> public void masterStep() {
> System.out.println("Master step executing");
> }
>
> public static void main(String[] args) {
> //doLoop(ScheduleTest.class, args);
> //System.exit(0);
> //*
> SimState state = new ScheduleTest(System.currentTimeMillis());
> System.out.println("Starting sim...");
> state.start();
> do {
> if (!state.schedule.step(state)) break;
> } while(state.schedule.getSteps() < 50);
> state.finish();
> System.exit(0);
> //*/
> }
>
> }
>
|
|
|