using System; using System.Collections.Generic; using System.Text; using System.Collections.Concurrent; namespace BPASmartClient.Helper { /// /// 延时上升沿触发 /// public class DelayRTrig { private volatile static ConcurrentDictionary _Instance; public static DelayRTrig GetInstance(string name) { if (_Instance == null) _Instance = new ConcurrentDictionary(); if (!_Instance.ContainsKey(name)) _Instance.TryAdd(name, new DelayRTrig()); return _Instance[name]; } private DelayRTrig() { } /// /// 计时条件 /// //public bool IN { get; set; } /// /// 当前时间 /// public long ET { get; private set; } = 0; private bool flag1; public bool Q { get; private set; } private bool IN1 { set { Q = value && !flag1; flag1 = value; } } private bool flag; DateTime startTime = new DateTime(); /// /// 开始计时(时间单位/秒) /// /// 计时时间(单位 秒) /// public bool Start(bool IN, int PT) { if (IN) { if (!flag) { startTime = DateTime.Now; flag = true; } if (ET < PT) ET = Convert.ToInt64(DateTime.Now.Subtract(startTime).TotalSeconds); } else { ET = 0; flag = false; } IN1 = ET >= PT; return Q; } } }