<Type Name="SystemFiberScheduler" FullName="SpicyPixel.Threading.SystemFiberScheduler">
  <TypeSignature Language="C#" Value="public class SystemFiberScheduler : SpicyPixel.Threading.FiberScheduler" />
  <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit SystemFiberScheduler extends SpicyPixel.Threading.FiberScheduler" />
  <AssemblyInfo>
    <AssemblyName>SpicyPixel.Threading</AssemblyName>
    <AssemblyVersion>1.0.5.34676</AssemblyVersion>
  </AssemblyInfo>
  <Base>
    <BaseTypeName>SpicyPixel.Threading.FiberScheduler</BaseTypeName>
  </Base>
  <Interfaces />
  <Docs>
    <summary>
            This class is the system default implementation of a <see cref="T:SpicyPixel.Threading.FiberScheduler" />
            and is capable of scheduling and executing fibers on the current thread.
            </summary>
    <remarks>
            Although no fibers execute after the scheduler is shutdown, none of the
            fibers are transitioned to a <see cref="F:SpicyPixel.Threading.FiberStatus.RanToCompletion" /> state and therefore
            it's not safe for a fiber to wait on a fiber outside of its own scheduler.
            This is currently enforced by <see cref="M:SpicyPixel.Threading.FiberScheduler.ExecuteFiber(SpicyPixel.Threading.Fiber)" /> for now although it would be
            possible to support fiber waits across schedulers in the future.
            </remarks>
  </Docs>
  <Members>
    <Member MemberName=".ctor">
      <MemberSignature Language="C#" Value="public SystemFiberScheduler ();" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
      <MemberType>Constructor</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <Parameters />
      <Docs>
        <summary>
            Initializes a new instance of the <see cref="T:SpicyPixel.Threading.FiberScheduler" /> class.
            </summary>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="Dispose">
      <MemberSignature Language="C#" Value="protected override void Dispose (bool disposing);" />
      <MemberSignature Language="ILAsm" Value=".method familyhidebysig virtual instance void Dispose(bool disposing) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="disposing" Type="System.Boolean" />
      </Parameters>
      <Docs>
        <param name="disposing">
            Disposing is true when called manually,
            false when called by the finalizer.
            </param>
        <summary>
            Dispose the scheduler.
            </summary>
        <remarks>
            When the scheduler is disposed, the <see cref="T:System.Threading.CancellationToken" /> is set.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="DisposeWaitHandle">
      <MemberSignature Language="C#" Value="protected System.Threading.WaitHandle DisposeWaitHandle { get; }" />
      <MemberSignature Language="ILAsm" Value=".property instance class System.Threading.WaitHandle DisposeWaitHandle" />
      <MemberType>Property</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Threading.WaitHandle</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>
            Gets the dispose wait handle.
            </summary>
        <value>
            The dispose wait handle.
            </value>
        <remarks>
            Run monitors this handle for a Dispose to know when to terminate.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="ExecutingFiberCount">
      <MemberSignature Language="C#" Value="protected int ExecutingFiberCount { get; }" />
      <MemberSignature Language="ILAsm" Value=".property instance int32 ExecutingFiberCount" />
      <MemberType>Property</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Int32</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>
            Gets the executing fiber count.
            </summary>
        <value>
            The executing fiber count.
            </value>
        <remarks>
            This can be used to optimize a custom run loop.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="GetNextFiberWakeTime">
      <MemberSignature Language="C#" Value="protected bool GetNextFiberWakeTime (out float fiberWakeTime);" />
      <MemberSignature Language="ILAsm" Value=".method familyhidebysig instance bool GetNextFiberWakeTime(float32 fiberWakeTime) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="fiberWakeTime" Type="System.Single&amp;" RefType="out" />
      </Parameters>
      <Docs>
        <param name="fiberWakeTime">
            The time marker in seconds the first sleeping fiber needs to wake up.
            This is based on a previously passed time value to Update().
            This value may be 0 if a sleeping fiber was aborted and
            therefore an update should process immediately.
            </param>
        <summary>
            Gets the time of the first fiber wake up.
            </summary>
        <returns>
            True if there was a sleeping fiber, false otherwise.
            </returns>
        <remarks>
            This method is primarily useful when manually calling Update()
            instead of Run() to know how long the thread can sleep for.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="IsRunning">
      <MemberSignature Language="C#" Value="public bool IsRunning { get; }" />
      <MemberSignature Language="ILAsm" Value=".property instance bool IsRunning" />
      <MemberType>Property</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>
            True if running
            </summary>
        <value>Is running.</value>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="QueueFiber">
      <MemberSignature Language="C#" Value="protected override sealed void QueueFiber (SpicyPixel.Threading.Fiber fiber);" />
      <MemberSignature Language="ILAsm" Value=".method familyhidebysig virtual instance void QueueFiber(class SpicyPixel.Threading.Fiber fiber) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="fiber" Type="SpicyPixel.Threading.Fiber" />
      </Parameters>
      <Docs>
        <param name="fiber">
            The fiber to queue.
            </param>
        <summary>
            Queues the fiber for execution on the scheduler.
            </summary>
        <remarks>
            Fibers queued from the scheduler thread will generally be executed
            inline whenever possible on most schedulers.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="Run">
      <MemberSignature Language="C#" Value="public override void Run (SpicyPixel.Threading.Fiber fiber, System.Threading.CancellationToken token, float updatesPerSecond);" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig virtual instance void Run(class SpicyPixel.Threading.Fiber fiber, valuetype System.Threading.CancellationToken token, float32 updatesPerSecond) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="fiber" Type="SpicyPixel.Threading.Fiber" />
        <Parameter Name="token" Type="System.Threading.CancellationToken" />
        <Parameter Name="updatesPerSecond" Type="System.Single" />
      </Parameters>
      <Docs>
        <param name="fiber">
            The optional fiber to start execution from. If this is <c>null</c>, the loop
            will continue to execute until cancelled. Otherwise, the loop will terminate
            when the fiber terminates.
            </param>
        <param name="token">
            A cancellation token that can be used to stop execution.
            </param>
        <param name="updatesPerSecond">
            Updates to all fibers per second. A value of <c>0</c> (the default) will execute fibers
            any time they are ready to do work instead of waiting to execute on a specific frequency.
            </param>
        <summary>
            Run the blocking scheduler loop and perform the specified number of updates per second.
            </summary>
        <remarks>
            Not all schedulers support a blocking run loop that can be invoked by the caller.
            The system scheduler is designed so that a custom run loop could be implemented
            by a derived type. Everything used to execute Run() is available to a derived scheduler.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="RunWaitHandle">
      <MemberSignature Language="C#" Value="protected System.Threading.ManualResetEvent RunWaitHandle { get; }" />
      <MemberSignature Language="ILAsm" Value=".property instance class System.Threading.ManualResetEvent RunWaitHandle" />
      <MemberType>Property</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Threading.ManualResetEvent</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>
            Gets the run wait handle.
            </summary>
        <value>
            The run wait handle.
            </value>
        <remarks>
            The run wait handle is set when not running and used to coordinate Dispose and Run.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="SchedulerEventWaitHandle">
      <MemberSignature Language="C#" Value="protected System.Threading.WaitHandle SchedulerEventWaitHandle { get; }" />
      <MemberSignature Language="ILAsm" Value=".property instance class System.Threading.WaitHandle SchedulerEventWaitHandle" />
      <MemberType>Property</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Threading.WaitHandle</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>
            Gets a wait handle which can be used to wait for a scheduler
            event to occur.
            </summary>
        <value>
            The scheduler event wait handle.
            </value>
        <remarks>
            Scheduler events trigger this handle to be signaled.
            Events occur any time a fiber is added to an execution queue,
            whether because it is new or because it is moving from
            a wait queue to an execution queue.
            
            This handle is used to sleep in Run() when there are
            no events to process, and a scheduler with a custom
            run loop may do the same.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="SleepingFiberCount">
      <MemberSignature Language="C#" Value="protected int SleepingFiberCount { get; }" />
      <MemberSignature Language="ILAsm" Value=".property instance int32 SleepingFiberCount" />
      <MemberType>Property</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Int32</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>
            Gets the sleeping fiber count.
            </summary>
        <value>
            The sleeping fiber count.
            </value>
        <remarks>
            This can be used to optimize a custom run loop.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="StartNew">
      <MemberSignature Language="C#" Value="public static SpicyPixel.Threading.SystemFiberScheduler StartNew ();" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class SpicyPixel.Threading.SystemFiberScheduler StartNew() cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>SpicyPixel.Threading.SystemFiberScheduler</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
            Starts a new thread, creates a scheduler, starts it running, and returns it to the calling thread.
            </summary>
        <returns>
            The scheduler from the spawned thread.
            </returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="StartNew">
      <MemberSignature Language="C#" Value="public static SpicyPixel.Threading.SystemFiberScheduler StartNew (SpicyPixel.Threading.Fiber fiber);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class SpicyPixel.Threading.SystemFiberScheduler StartNew(class SpicyPixel.Threading.Fiber fiber) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>SpicyPixel.Threading.SystemFiberScheduler</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="fiber" Type="SpicyPixel.Threading.Fiber" />
      </Parameters>
      <Docs>
        <param name="fiber">
            A fiber to start execution from.
            </param>
        <summary>
            Starts a new thread, creates a scheduler, starts it running, and returns it to the calling thread.
            </summary>
        <returns>
            The scheduler from the spawned thread.
            </returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="StartNew">
      <MemberSignature Language="C#" Value="public static SpicyPixel.Threading.SystemFiberScheduler StartNew (System.Threading.CancellationToken token, float updatesPerSecond = 0);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class SpicyPixel.Threading.SystemFiberScheduler StartNew(valuetype System.Threading.CancellationToken token, float32 updatesPerSecond) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>SpicyPixel.Threading.SystemFiberScheduler</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="token" Type="System.Threading.CancellationToken" />
        <Parameter Name="updatesPerSecond" Type="System.Single" />
      </Parameters>
      <Docs>
        <param name="token">
            A token to cancel the thread.
            </param>
        <param name="updatesPerSecond">
            Updates to run per second.
            </param>
        <summary>
            Starts a new thread, creates a scheduler, starts it running, and returns it to the calling thread.
            </summary>
        <returns>
            The scheduler from the spawned thread.
            </returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="StartNew">
      <MemberSignature Language="C#" Value="public static SpicyPixel.Threading.SystemFiberScheduler StartNew (SpicyPixel.Threading.Fiber fiber, System.Threading.CancellationToken token, float updatesPerSecond = 0);" />
      <MemberSignature Language="ILAsm" Value=".method public static hidebysig class SpicyPixel.Threading.SystemFiberScheduler StartNew(class SpicyPixel.Threading.Fiber fiber, valuetype System.Threading.CancellationToken token, float32 updatesPerSecond) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>SpicyPixel.Threading.SystemFiberScheduler</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="fiber" Type="SpicyPixel.Threading.Fiber" />
        <Parameter Name="token" Type="System.Threading.CancellationToken" />
        <Parameter Name="updatesPerSecond" Type="System.Single" />
      </Parameters>
      <Docs>
        <param name="fiber">
            A fiber to start execution from.
            </param>
        <param name="token">
            A token to cancel the thread.
            </param>
        <param name="updatesPerSecond">
            Updates to run per second.
            </param>
        <summary>
            Starts a new thread, creates a scheduler, starts it running, and returns it to the calling thread.
            </summary>
        <returns>
            The scheduler from the spawned thread.
            </returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="Update">
      <MemberSignature Language="C#" Value="protected void Update (float time);" />
      <MemberSignature Language="ILAsm" Value=".method familyhidebysig instance void Update(float32 time) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="time" Type="System.Single" />
      </Parameters>
      <Docs>
        <param name="time">
            Time in seconds since the scheduler or application began running.
            This value is used to determine when to wake sleeping fibers.
            Using float instead of TimeSpan spares the GC.
            </param>
        <summary>
            Update the scheduler which causes all queued tasks to run
            for a cycle.
            </summary>
        <remarks>
            This method is useful when updating the scheduler manually
            with a custom run loop instead of calling <see cref="M:SpicyPixel.Threading.SystemFiberScheduler.Run(SpicyPixel.Threading.Fiber,System.Threading.CancellationToken,System.Single)" />.
            </remarks>
      </Docs>
    </Member>
  </Members>
</Type>
