mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-09-07 03:17:25 -05:00
add VRM scripts
This commit is contained in:
48
Scripts/UniTask/MonitorQueue.cs
Normal file
48
Scripts/UniTask/MonitorQueue.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
|
||||
|
||||
namespace UniTask
|
||||
{
|
||||
/// <summary>
|
||||
/// http://blogs.msdn.com/b/toub/archive/2006/04/12/blocking-queues.aspx
|
||||
///
|
||||
/// <20>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD>ʒm<CA92><6D><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD>null<6C>𓊓<EFBFBD><F0938A93><EFBFBD><EFBFBD><EFBFBD><EFBFBD>肪<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD>
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
public class MonitorQueue<T>
|
||||
where T : class
|
||||
{
|
||||
private Int32 _count = 0;
|
||||
public Int32 Count
|
||||
{
|
||||
get
|
||||
{
|
||||
return _count;
|
||||
}
|
||||
}
|
||||
|
||||
private Queue<T> _queue = new Queue<T>();
|
||||
|
||||
public T Dequeue()
|
||||
{
|
||||
lock (_queue)
|
||||
{
|
||||
while (_count <= 0) Monitor.Wait(_queue);
|
||||
_count--;
|
||||
return _queue.Dequeue();
|
||||
}
|
||||
}
|
||||
|
||||
public void Enqueue(T data)
|
||||
{
|
||||
lock (_queue)
|
||||
{
|
||||
_queue.Enqueue(data);
|
||||
_count++;
|
||||
Monitor.Pulse(_queue);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user