Hi JS, Thanks for the patch, I created a test and then folded your change in to SDFDirector.prefire()
About the while loop in prefire(), if the _workspace.wait() was interrupted, then I think we would want to loop back through until the time was right. I'm not sure about this, but that's my guess. > I also find a strange inconsistency in the way the synchronizeToRealTime > is handled in SDFDirector.prefire(), > ContinuousDirector._synchronizeToRealTime() and > CTMultiSolverDirector.updateContinuousState(). I think it would be > better if there were just one way to do the synchronisation, maybe > implemented in a super class. Good point. The three methods were probably written by three different people. I've submitted a bug, but it will likely be awhile before this is addressed. Thanks again for the patch! _Christopher -------- Hi, I've managed to fix it. The problem was that sometimes, the method Object.wait(timeout) was called with timeout = 0. According to java documentation: " If timeout is zero, however, then real time is not taken into consideration and the thread simply waits until notified." A small patch on SDFDirector.java fixed this: ========= 441c441,442 < _workspace.wait(this, timeToWait); --- > if (timeToWait > 0) > _workspace.wait(this, timeToWait); ========= The way this part of the code is implemented is rather odd however. I wonder why there is a while(true) loop if, anyway, we are calling the wait() method. Clearly, the while loop will always run just once. I guess we could simplify the code by removing the while loop. Cheers, ++js JS wrote: > Hi all, > > I'm currently testing the real-time possibilities of PtII. I'm running > under Eclipse with a Mac Book Pro. When trying to execute the > following test app, I get a strange behavior: after some time (not > always the same) the application stalls. That is, I get output like: > "hello world" > "hello world" > "hello world" > "hello world" > > ... and then nothing. The number of iterations before it stops is not > always the same. > > Please tell me if you need further details or if there is something I > forgot to write in my code. > > Thanks, > > ++ js > > == class SDFSimpleTest == > > import ptolemy.actor.TypedCompositeActor; > import ptolemy.kernel.util.IllegalActionException; > import ptolemy.kernel.util.NameDuplicationException; > import ptolemy.domains.sdf.kernel.SDFDirector; > import ptolemy.actor.Manager; > import ptolemy.actor.lib.StringConst; > import ptolemy.actor.lib.Writer; > > public class SDFSimpleTest { > > public static void main(String[] args) throws > NameDuplicationException, IllegalActionException { > TypedCompositeActor top = new TypedCompositeActor(); > // Create the director. > SDFDirector director = new SDFDirector(top, "director"); > director.period.setExpression("0.001"); > director.synchronizeToRealTime.setExpression("true"); > Manager manager = new Manager("manager"); > top.setManager(manager); > // Create two actors. > StringConst reader = new StringConst(top, "reader"); > reader.value.setExpression("hello world"); > Writer writer = new Writer(top, "writer"); > top.connect(reader.output, writer.input); > top.getManager().startRun(); > } > } > -- J. S. Senécal http://drone.ws --------------------------------------------------------------------------- - Posted to the ptolemy-hackers mailing list. Please send administrative mail for this list to: [EMAIL PROTECTED] -------- ---------------------------------------------------------------------------- Posted to the ptolemy-hackers mailing list. Please send administrative mail for this list to: [EMAIL PROTECTED]