mirror of
https://gitee.com/langsisi_admin/serein-flow
synced 2026-04-03 14:56:34 +08:00
重写了节点的view、viewmodel关系,实现了对画布元素的选取功能,重构了底层依赖,添加了对net .Framework4.6.1以上的Framework类库支持
This commit is contained in:
71
Library.Core/DbSql/FifoManualResetEvent.cs
Normal file
71
Library.Core/DbSql/FifoManualResetEvent.cs
Normal file
@@ -0,0 +1,71 @@
|
||||
namespace Serein.DbSql
|
||||
{
|
||||
/// <summary>
|
||||
/// 线程阻塞
|
||||
/// </summary>
|
||||
public class FifoManualResetEvent
|
||||
{
|
||||
private readonly object lockObj = new object();
|
||||
/// <summary>
|
||||
/// 让线程按进入时间顺序调用
|
||||
/// </summary>
|
||||
private readonly Queue<Thread> waitQueue = new Queue<Thread>();
|
||||
private bool isSet;
|
||||
|
||||
public bool IsSet { get => isSet; set => isSet = value; }
|
||||
|
||||
public FifoManualResetEvent(bool initialState = false)
|
||||
{
|
||||
IsSet = initialState;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 等待解锁
|
||||
/// </summary>
|
||||
public void Wait()
|
||||
{
|
||||
lock (lockObj)
|
||||
{
|
||||
if (IsSet)
|
||||
{
|
||||
// 获取到了发送的信号,线程开始重新执行
|
||||
return;
|
||||
}
|
||||
|
||||
var currentThread = Thread.CurrentThread;
|
||||
waitQueue.Enqueue(currentThread);
|
||||
|
||||
while (!IsSet || waitQueue.Peek() != currentThread)
|
||||
{
|
||||
Monitor.Wait(lockObj);
|
||||
}
|
||||
|
||||
waitQueue.Dequeue();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发送信号
|
||||
/// </summary>
|
||||
public void Set()
|
||||
{
|
||||
lock (lockObj)
|
||||
{
|
||||
IsSet = true;
|
||||
Monitor.PulseAll(lockObj);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 锁定当前线程
|
||||
/// </summary>
|
||||
public void Reset()
|
||||
{
|
||||
lock (lockObj)
|
||||
{
|
||||
IsSet = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user