# processOopPrimitives

- <Process class> primitiveProcessCreate:ifFail: ^<Process>

      'Creates a new process'

  Parameters:
  block <BlockWithoutArguments>
  Errors: ProcessAllocationFailed

- primitiveProcessYield ^<Process>

      'Yields the control to the scheduler.'
      'Does nothing if executed by the scheduler.'
      'Returns current process when regaining control.'

- primitiveProcessStop ^<Process>

      'Yields the control to the scheduler.'
      'Does nothing if executed by the scheduler.'
      'Returns current process when regaining control.'

- primitiveProcessActiveProcess ^<Object>

      'Returns the active process'

- primitiveProcessTransferTo:ifFail: ^<Object>

      'Transfers the control from the scheduler to a process.'
      'Returns the status of process (see primitiveProcessStatus).'

  Parameters:
  process <Process>
  Errors: NotInScheduler ProcessCannotContinue Dead

- primitiveProcessSingleStep:ifFail: ^<Object>

      'Transfers the control from the scheduler to a process,'
      'performs a single step and yields.'
      'Returns the status of process (see primitiveProcessStatus).'

  Parameters:
  process <Process>
  Errors: NotInScheduler ProcessCannotContinue Dead

- <Process> primitiveProcessTerminateIfFail: ^<Self>

      'Terminates the process'

  Errors: Dead
  Flags: NLR

- <Process> primitiveProcessStatus ^<Symbol>

      'Returns the process status:'
      '  #Initialized            - State right after creation.'
      '  #Yielded                - Gave up control by calling yield.'
      '  #Running                - Is running.'
      '  #InAsyncDLL             - Gave up control but continues to execute asynchronous DLL.'
      '  #Stopped                - Gave up control by calling stop.'
      '  #Preempted              - Was preempted by system.'
      '  #Completed              - Ran to completion.'
      '  #Dead                   - The process is dead.'
      '  #BooleanError           - A boolean was expected at hardcoded control structure.'
      '  #FloatError             - A float was expected at hardcoded float operation.'
      '  #LookupError            - The receiver does not understand doesNotUnderstand:.'
      '  #PrimitiveLookupError   - Binding a primitive failed.'
      '  #DLLLookupError         - Binding a DLL function failed.'
      '  #NLRError               - Context for NLR did not exist.'
      '  #StackOverflow          - Stack exhausted.'

- <Process> primitiveProcessSchedulerWait:ifFail: ^<Boolean>

      'Waits until timer has expired or a asynchronous dll call has returned.'
      'Returns whether the timer expired.'

  Parameters:
  milliseconds <SmallInteger>

- <Process> primitiveProcessTraceStack:ifFail: ^<Self>

      'Prints the stack trace'

  Parameters:
  size <SmallInteger>

- primitiveProcessEnterCritical ^<Process>

      'Disables preemption in active process.'

- primitiveProcessLeaveCritical ^<Process>

      'Enables preemption in active process'

- primitiveProcessYieldInCritical ^<Process>

      'Yields the control to the scheduler.'
      'Does nothing if executed by the scheduler.'
      'Returns current process when regaining control.'

- <Process> primitiveProcessUserTime ^<Float>

      'Returns time, in seconds, the process has spent in user code'

- <Process> primitiveProcessSystemTime ^<Float>

      'Returns time, in seconds, the process has spent in system code'

- <Process> primitiveProcessStackLimit:ifFail: ^<IndexedInstanceVariables>

      'Returns an array of the process activation'

  Parameters:
  limit <SmallInteger>