Initializing help system before first use

Stopping the submodel execution

If a submodel execution takes a long time it may be desirable to interrupt the submodel without stopping the master model itself. The following modified version of our master model (file runsubwait.mos) shows how this can be achieved by adding a duration (in seconds) to the wait statement. If the submodel has not yet sent the termination event message after executing for one second it is stopped by the call to stop with the model reference.

model "Run model testsub"
 uses "mmjobs"

 declarations
  modSub: Model
 end-declarations
                                   ! Compile the model file
 if compile("testsub.mos")<>0 then exit(1); end-if
 load(modSub, "testsub.bim")       ! Load the bim file
 run(modSub)                       ! Start model execution
 wait(1)                           ! Wait 1 second for an event

 if isqueueempty then              ! No event has been sent: model still runs
  writeln("Stopping the submodel")
  stop(modSub)                     ! Stop the model
  wait                             ! Wait for model termination
 end-if
 dropnextevent                     ! Ignore termination event message

end-model 

A more precise time measurement can be obtained by retrieving a "model ready" user event from the submodel before we begin to wait for a given duration. With heavy operating system loads the actual submodel start may be delayed, and the event sent by the submodel tells the master model the exact point of time when its processing is started. Class codes for user events can take any integer value greater than 1 (values 0 and 1 are reserved respectively for the nullevent and the predefined class EVENT_END).

model "Run model testsub"
 uses "mmjobs"

 declarations
  modSub: Model
  ev: Event
  SUBMODREADY = 2                  ! User event class code
 end-declarations
                                   ! Compile the model file
 if compile("testsubev.mos")<>0 then exit(1); end-if
 load(modSub, "testsubev.bim")     ! Load the bim file
 run(modSub)                       ! Start model execution
 wait                              ! Wait for an event
 if getclass(getnextevent) <> SUBMODREADY then
  writeln("Problem with submodel run")
  exit(1)
 end-if

 wait(1)                           ! Let the submodel run for 1 second

 if isqueueempty then              ! No event has been sent: model still runs
  stop(modSub)                     ! Stop the model
  wait                             ! Wait for model termination
 end-if

 ev:=getnextevent                  ! An event is available: model finished
 writeln("Event class: ", getclass(ev))
 writeln("Event value: ", getvalue(ev))
 writeln("Exit code  : ", getexitcode(modSub))

end-model 

The modified submodel testsubev.mos now looks as follows. The user event class must be the same as in the master model. In this example we are not interested in the value sent with the event and therefore simply leave it at 0.

model "Test submodel (Event)"
 uses "mmjobs"

 declarations
  SUBMODREADY = 2                  ! User event class code
 end-declarations

 send(SUBMODREADY, 0)              ! Send "submodel ready" event

 forall(i in 10..20) write(i^2, " ")
 writeln

end-model  

© 2001-2019 Fair Isaac Corporation. All rights reserved. This documentation is the property of Fair Isaac Corporation (“FICO”). Receipt or possession of this documentation does not convey rights to disclose, reproduce, make derivative works, use, or allow others to use it except solely for internal evaluation purposes to determine whether to purchase a license to the software described in this documentation, or as otherwise set forth in a written software license agreement between you and FICO (or a FICO affiliate). Use of this documentation and the software described in it must conform strictly to the foregoing permitted uses, and no other use is permitted.