MathGroup Archive 2002

[Date Index] [Thread Index] [Author Index]

Search the Archive

FrontEnd-Kernel Synching, was: How to animate?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg38551] FrontEnd-Kernel Synching, was: [mg38509] How to animate?
  • From: Omega Consulting <info at omegaconsultinggroup.com>
  • Date: Wed, 25 Dec 2002 03:13:01 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

At 10:40 PM 12/20/2002, David Park wrote:
>DoShow /@ frames1;
>SelectionMove[EvaluationNotebook[], All, GeneratedCell]
>FrontEndTokenExecute["OpenCloseGroup"]; Pause[0.01];
>FrontEndExecute[{FrontEnd`SelectionAnimate[200, AnimationDisplayTime -> 0.1,
>       AnimationDirection -> Forward]}]
>
>The Pause command was included to guarantee that the cell group is closed
>before the animation starts. However I find that there is a bug in Pause in
>that it always pauses for 1 second even though it should handle smaller time
>intervals.
>
>David Park

Just a side note here:
This is related to a problem I often have. Some commands (such as 
FrontEndExecute) only instruct the frontend to do an operation. The kernel 
does not wait until the frontend has finished. Here's an example:

In[]:= nb=NotebookCreate[];

In[]:= fname = "test.nb";

The ReadList acts before NotebookSave is finished. If the file didn't exist 
previously, the ReadList fails even though the file is created.

In[]:=
NotebookSave[nb, fname];
ReadList[fname, Record]

ReadList::nffil: File not found during \[LeftSkeleton]1\[RightSkeleton].

Out[]= $Failed

You can try to synchronize with Pause, except that it is limited to an 
integer number of seconds (as David notes) and you can't be certain that 
your Pause will always be long enough.

The best trick I've come up with is to execute a command that requires both 
frontend and kernel activity. Like a frontend command that returns a kernel 
result, such as Notebooks[]. The kernel will wait until the frontend sends 
the list of NotebookObjects. And the frontend does not send this list until 
it has completed all previous actions.

In[]:= DeleteFile[fname];

In[]:=
NotebookSave[nb, fname];
Notebooks[];
ReadList[fname, Record]//Length

Out[]= 62

I find this much more reliable than Pause.

--------------------------------------------------------------
Omega Consulting
"The final answer to your Mathematica needs"
http://omegaconsultinggroup.com



  • Prev by Date: Re: Quintic
  • Next by Date: Re: RE: Re: How to animate?
  • Previous by thread: RE: Help with pasting with Basic Input Palette
  • Next by thread: help on nonlinear ODEs