On Sun, Jul 31, 2011 at 10:25 AM, Sunil S Nandihalli <[email protected]> wrote: > Hello everybody, > I would like to have a long running process to return its current solution > after some pre-determined amount of time. It so happens that the iteration > is happening at a deeper nested function. I would like to have a way to > return from this nested function when its time ... How can I do this. > Currently I am considering using the > throw catch mechanism to do the job. Is there a better way of doing things > like this .. . I basically would like to have a non-local return .. > something like the common-lisps return-from .. I > found return-from equivalent in clojure.. I was hoping there is a nicer way > to deal with this when the function calls are quiet deeply nested..
Probably the least messy way to deal with it is to sprinkle (Thread/sleep 0)s through the innermost loops of the algorithm, one in each, and the outermost loop that refines the in-progress result has a try ... catch for InterruptedException that handles it by returning the current approximation. Then have a separate threat that calls interrupt on the calculational thread on a timer, or if a user clicks a Cancel button on a progress dialog, or whatever. This is more or less what InterruptedException is for; and breaking out of an algorithm in an unusual way is the kind of job for which exceptions are well suited, as well as returning from fairly deep up to a specific handler. -- Protege: What is this seething mass of parentheses?! Master: Your father's Lisp REPL. This is the language of a true hacker. Not as clumsy or random as C++; a language for a more civilized age. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/clojure?hl=en
