C#---- 单列模式(定时器)
// 定义计时器对象
1 public class CountDown 2 { 3 4 private static CountDown theCountDown = null; 5 private static readonly object _padLock = new object(); // unique object for lock 6 7 private Timer timer = null; //计时器 8 private int dt; 9 10 /// <summary> 11 /// decide logic 12 /// </summary> 13 public int DT 14 { 15 get; 16 set; 17 } 18 19 private CountDown () 20 { 21 timer = new Timer(); 22 timer.Interval = 60000; // 1 min to elapsed 23 dt = 0; 24 DT = 0; 25 timer.Elapsed += timer_Elapsed; 26 } 27 28 private void timer_Elapsed(object sender, ElapsedEventArgs e) 29 { 30 dt--; 31 if (dt<=0) 32 { 33 timer.Stop(); 34 } 35 DT = dt; // update DT for logic 36 } 37 38 39 /// <summary> 40 /// start timer by using param to set times of loop 41 /// </summary> 42 /// <param name="times"></param> 43 public void Start(int times) 44 { 45 if (dt <=0) 46 { 47 dt = times; 48 timer.Start(); 49 } 50 51 } 52 53 /// <summary> 54 /// start timer 60 times loop as default 55 /// </summary> 56 public void Start() 57 { 58 if (dt <= 0) 59 { 60 dt = 60; 61 timer.Start(); 62 } 63 64 } 65 66 /// <summary> 67 /// stop timer 68 /// </summary> 69 public void Stop() 70 { 71 timer.Stop(); 72 } 73 74 /// <summary> 75 /// 实例化定时器 76 /// </summary> 77 /// <returns></returns> 78 public static CountDown Instance() 79 { 80 //判定对象是否实例化 81 if (null == theCountDown) 82 { 83 lock (_padLock)// 添加线程锁 84 { 85 if (null == theCountDown) 86 { 87 theCountDown = new CountDown(); 88 } 89 } 90 91 } 92 return theCountDown; 93 } 94 }
1 //实例化对象 2 CountDown cd = CountDown.Instance(); 3 if (cd.DT <= 0) 4 { 7 8 // TODO Something: 9 10 cd.Start(60); //开始计时,设定循环次数(1小时后,才可以再次调用该逻辑) 11 }