Harmon Nine wrote:

So the program would look something like this?

==========================
Sobj = {New Search.object script(Space OptProc)}

proc {WillContinue NextSolution} {SObj next(NextSolution)} end
proc {WillStop NextSolution} NextSolution = stopped end

P = {NewCell WillContinue}

Thread 1:
proc {GetNextSolution}
 NextSolution
in
 [EMAIL PROTECTED] NextSolution}

 if NextSolution == stopped then
   skip
 else
   Process NextSolution
   {GetNextSolution}
 end

end

Thread 2:
proc {StopThread}
 P := WillStop
 {Sobj stop}
end
==========================

What I mean is to redifine the Order that is passed as a paramenter to the script method:

P={NewCell "your order procedure"}
Order= proc{$ Old New} [EMAIL PROTECTED] Old New} end
Sobj={New Search.object script(Script Order)}

Thread 1:
proc {GetNextSolution}

 NextSolution
in
 {Sobj next(NextSolution)}

 if {Member NextSolution [stopped nil]} then
   skip
 else
   Process NextSolution
   {GetNextSolution}
 end

end

Thread 2:
proc {Stop}
  P:=proc {$ _ _} fail end
  {Sobj stop}
end


This is a better solution, i.e. it is deterministic in that the call in
Thread 2 to the StopThread proc is guaranteed to (eventually) stop
calculation.  However there's still a race that has a (very small)
chance of causing the calculations not to stop immediately when the
"stop" method is called on SObj.  An immediate termination would be
necessary on receipt of a user input event, or the expiration of a
soft-real-time timer.

Scenario:
@P has value WillContinue
In Thread 1 (top of GetNextSolution proc), @P is dereferenced and thus
WillContinue is called.
Program execution in Thread 1 is now in the WillContinue proc, but
Thread 1 is pre-empted *before* the {SObj next(NextSolution}} call.

Thread 2 fires up on user input event, changes the value of P to
WillStop and calls the stop method on SObj.
This call to the stop method sets the 'isStopped' flag for the Search
object SObj.
Thread 2 is pre-empted.

If Stop has been executed before {Sobj next(NextSolution)}, {Sobj next(NextSolution)} will return immediately because of the failure exception.

Luis

_________________________________________________________________________________
mozart-hackers mailing list [email protected] http://www.mozart-oz.org/mailman/listinfo/mozart-hackers

Reply via email to