next up previous 61
Next: Receipt of messages from other tasks
Up: ADAM Guide to Writing Instrumentation Tasks
Previous: Completion of data input


Kicking one action from another

In some complex instrumentation systems you may wish to have an action in a task which wakes other waiting actions within the same task. TASK_KICK(NAME,LENGTH,VALUE,STATUS) may be called to do this.

      SUBROUTINE KICKER ( STATUS )
      IMPLICIT NONE
      INCLUDE 'SAE_PAR'
      INCLUDE 'ACT_ERR'
      INCLUDE 'MESSYS_ERR'
      INTEGER STATUS
      INTEGER SEQ
      INTEGER REASON
      CHARACTER*(PAR__SZNAM) NAME
      CHARACTER*(MSG_VAL_LEN) VALUE
      INTEGER LENGTH

      IF ( STATUS .NE. SAI__OK ) RETURN
      CALL TASK_GET_NAME ( NAME, STATUS )
      IF ( NAME .EQ. 'WAIT' ) THEN
         CALL TASK_GET_SEQ ( SEQ, STATUS )
         IF ( SEQ .EQ. 0 ) THEN
            CALL TASK_PUT_DELAY ( 10000, STATUS )
            CALL TASK_PUT_REQUEST ( ACT__WAIT, STATUS )
         ELSE
            CALL TASK_GET_REASON ( REASON, STATUS )
            IF ( REASON .EQ. MESSYS__KICK ) THEN
               CALL TASK_GET_VALUE ( VALUE, STATUS )
               CALL MSG_OUT ( ' ', VALUE, STATUS )
            ELSE IF ( REASON .EQ. MESSYS__RESCHED ) THEN
               CALL MSG_OUT ( ' ', waked by timer', STATUS )
            ENDIF
         ENDIF
      ELSE IF ( NAME .EQ. 'KICK' ) THEN
         VALUE = 'waked by kick'
         LENGTH = 13
         CALL TASK_KICK ( 'WAIT', LENGTH, VALUE, STATUS )
      ENDIF
      END



next up previous 61
Next: Receipt of messages from other tasks
Up: ADAM Guide to Writing Instrumentation Tasks
Previous: Completion of data input

ADAM Guide to Writing Instrumentation Tasks
Starlink User Note 134
B D Kelly
A J Chipperfield

30 March 1992
E-mail:ussc@star.rl.ac.uk

Copyright © 2000 Council for the Central Laboratory of the Research Councils