52 lines
1.3 KiB
C#
52 lines
1.3 KiB
C#
namespace DepthFirstScheduler
|
|
{
|
|
public static partial class Scheduler
|
|
{
|
|
private static StepScheduler mainThread;
|
|
|
|
public static StepScheduler MainThread
|
|
{
|
|
get
|
|
{
|
|
if (mainThread != null) return mainThread;
|
|
mainThread = new StepScheduler();
|
|
MainThreadDispatcher.Initialize();
|
|
return mainThread;
|
|
}
|
|
}
|
|
|
|
public class StepScheduler : IScheduler
|
|
{
|
|
LockQueue<TaskChain> m_taskQueue = new LockQueue<TaskChain>();
|
|
|
|
public void Enqueue(TaskChain item)
|
|
{
|
|
m_taskQueue.Enqueue(item);
|
|
}
|
|
|
|
TaskChain m_chain;
|
|
|
|
public int UpdateAndGetTaskCount()
|
|
{
|
|
if (m_chain != null)
|
|
{
|
|
var status = m_chain.Next();
|
|
if (status == ExecutionStatus.Continue)
|
|
{
|
|
// m_item継続中
|
|
return m_taskQueue.Count;
|
|
}
|
|
m_chain = null;
|
|
}
|
|
|
|
int count;
|
|
m_chain = m_taskQueue.Dequeue(out count);
|
|
return count;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
}
|
|
}
|
|
}
|
|
}
|