Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2000
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2000

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

Search the Archive

interruptedWhile ADDENDUM

  • To: mathgroup at smc.vnet.net
  • Subject: [mg24615] interruptedWhile ADDENDUM
  • From: Daniel Reeves <dreeves at eecs.umich.edu>
  • Date: Fri, 28 Jul 2000 17:23:51 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Well, it worked fine on small tests but I failed to notice that it would
run into $IterationLimit eventually.  Here's a better version:

SetAttributes[interruptedWhile, HoldRest];
interruptedWhile[interruptFreq_, interruptBody_, whileTest_, whileBody_]
:=
  While[
    TimeConstrained[
      While[whileTest, AbortProtect[whileBody]],
      interruptFreq];
    If[whileTest, Evaluate[interruptBody]; True, False]
  ]


> (* Like a While loop except for the 1st 2 args, which say: every so many
>    seconds pause and execute some code, presumably with the purpose of
>    announcing some partial results or the status of the computation.
> *)
> SetAttributes[interruptedWhile, HoldRest];
> interruptedWhile[interruptFreq_, interruptBody_, whileTest_, whileBody_] 
> := 
> Module[{compLoop, goComp},
>   compLoop := While[whileTest, AbortProtect[whileBody]];
>   goComp := TimeConstrained[compLoop, interruptFreq, 
>               Evaluate[interruptBody]; goComp];
>   goComp;
> ]
> 
> 
> Here's an example of using it:
> 
> i = 1;
> numFound = 0;
> interruptedWhile[3,
>   Print["Checked 1 thru ", i - 1, " and found ", numFound, 
>     " primes (expected ", PrimePi[i - 1], ")..."],
>   i <= 1000000,
>     If[PrimeQ[i], numFound++];
>     i++;
> ]
> 
> Of course, you can manually interrupt and check on a computation from the
> front-end, so this is most useful for a really long computation that you
> have running in the background.  In those cases, I often like to have the
> program send periodic emails.  So while I'm at it, I'll paste in code to
> do that (of course this only works on Unix/Linux):


  • Prev by Date: Re: Ron Knapp's time function
  • Next by Date: Mathematica in University introductory physics courses
  • Previous by thread: mma.el -- emacs mode for writing mathematica package files
  • Next by thread: Mathematica in University introductory physics courses