TABLE OF CONTENTS


/Signal [ Modules ]

[ Top ] [ Modules ]

DESCRIPTION

SEE ALSO

    /Messagequeue, /Mutex, /Pipe, /Semaphore, /Syncpipe

Signal/Os_task_getevent [ Functions ]

[ Top ] [ Signal ] [ Functions ]

DESCRIPTION

DECLARATION

Function Os_task_getevent(byval Eventmask As Byte , Byval Queuemode As Word) As Byte

SOURCE

   Local Flags As Byte
   Local Event As Byte

   Os_enter_critical
   Flags = Getbyte(Os_task_active , Os_task_hdr_signals_ptr)
   Event = Flags And Eventmask

   If Event = False Then                                    ' no events waiting   '
      Select Case Queuemode
      Case Os_queuemode_noblock:
         ' return error   '
         Os_exit_critical
         Os_task_getevent = False
         Exit Function
      Case Os_queuemode_block:
         ' suspend and wait for event   '
         Os_task_suspendmode Os_task_active , Os_task_suspend_nowakeup , 0
      Case Else
         ' suspend and wait for event or timeout   '
         Os_task_suspendmode Os_task_active , Os_task_suspend_timersingleshot , Queuemode
      End Select

      Os_exit_critical
      Os_task_suspend Os_task_active
      Os_enter_critical

      Flags = Getbyte(Os_task_active , Os_task_hdr_signals_ptr)
      Event = Flags And Eventmask
      If Event = False Then                                 ' still no events   '
         Os_exit_critical
         Os_task_getevent = False
         Exit Function
      End If
   End If

   Event = Get_msb_b(event)                                 ' get highest event   '
   Decr Event
   Flags.event = False                                      ' clear event flag   '
   Incr Event
   Setbyte Os_task_active , Os_task_hdr_signals_ptr , Flags
   Os_exit_critical

   Os_task_getevent = Event
End Function

Signal/Os_task_setevent [ Functions ]

[ Top ] [ Signal ] [ Functions ]

DESCRIPTION

DECLARATION

Sub Os_task_setevent(byref Task As Word , Byval Event As Byte)

SOURCE

   Local Flags As Byte

   Decr Event
   Os_enter_critical
   Flags = Getbyte(Task , Os_task_hdr_signals_ptr)
   Flags.event = True                                       ' set event flag   '
   Setbyte Task , Os_task_hdr_signals_ptr , Flags

   Os_event_task = Task
   Os_exit_critical
   Os_task_event                                            ' Signal the Task   '
End Sub