MathGroup Archive 2010

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

Search the Archive

Re: Problems with ChoiceDialog inside a Dynamic: Bug or not (well)

  • To: mathgroup at smc.vnet.net
  • Subject: [mg107838] Re: Problems with ChoiceDialog inside a Dynamic: Bug or not (well)
  • From: Albert Retey <awnl at gmx-topmail.de>
  • Date: Sun, 28 Feb 2010 04:53:10 -0500 (EST)
  • References: <hmakpo$buu$1@smc.vnet.net>

Hi,

> Synchronous Dynamics (which is what you get by default) are stop-the-world sorts 
> of evaluations.  When they're running, any ongoing kernel computation is 
> completely halted, and the Dynamic evaluation is completely uninterruptible.
> Even another Dynamic evaluation cannot interrupt it.  Likewise, the front end is 
> locked into a mode where it can only respond to a very limited number of events 
> while it awaits the resolution of the Dynamic.
> 
> For this reason, all synchronous Dynamics are evaluated, by default, with a
> TimeConstrained wrapper using a time derived from the EvaluationDynamicTimeout 
> option in the kernel.  This option can be tailored on a per-Dynamic basis if you 
> like using the Style[] function to set the option.  The goal is that absolutely 
> no Dynamic should be allowed to lock up the front end and kernel in such away 
> that they appear unresponsive to users.
> 
> ChoiceDialog[], or any other function which awaits user input, causes the kernel 
> to wait for results, but doesn't stop the timer in TimeConstrained[] from 
> expiring.
> 
> Any Dynamic which you expect to take a long time should be using 
> SynchronousDynamic->False.  This causes the Dynamic to be put into the same
> queue as Shift+Enter evaluations, and it can take as long as you want.  So it's 
> not evaluated urgently, but there will be no need for it to evaluate urgently, 
> either.
> 
> Incidentally, the same thing applies with Method->{"Queued"} (as opposed to
> "Preemptive") in Button and ActionMenu.

I hear your words, but probably don't understand....

While my experience shows that Method->"Queued" in Buttons and
ActionMenus fixes any problems with kernel blocking dialogs, using
SynchronosUpdating->False (I guess that's what you meant) does not help,
at least with my version 7 on Windows XP this also hangs:

DynamicModule[{planets, x, habitantq},
 planets = {"Mercury", "Venus", "Earth"};
 x = First[planets];
 Column[{
   PopupMenu[Dynamic[x, {x = #;
       If[StringMatchQ[x, "Earth"],
        habitantq = ChoiceDialog[Column[{"Do you live on earth?"}],
          {"Yes" -> True, "No" -> False}]]} &,
     SynchronousUpdating -> False], planets],
   Dynamic[x],
   Dynamic[habitantq]
   }]]

and so does this:

DynamicModule[{planets, x, habitantq},
 planets = {"Mercury", "Venus", "Earth"};
 x = First[planets];
 Column[{
   PopupMenu[Dynamic[x, {x = #;
       If[StringMatchQ[x, "Earth"],
        habitantq = ChoiceDialog[Column[{"Do you live on earth?"}],
          {"Yes" -> True, "No" -> False}]]} &,
     SynchronousUpdating -> False], planets],
   Dynamic[x, SynchronousUpdating -> False],
   Dynamic[habitantq, SynchronousUpdating -> False]
   }]]

is there any known way to get something like this working?

regards,

albert


  • Prev by Date: Re: Transition to Wolfram Workbench
  • Previous by thread: Re: Problems with ChoiceDialog inside a Dynamic: Bug
  • Next by thread: Pass argument name to plot label