public Test_Time() { // 假设我们有特殊的需求需要关闭此对象的更新可以调用 // 如果可能尽可能在不再使用时调用此函数 // Close(); // 同样需要关闭一切进程中的更新可以使用此类的静态函数 // TimeFlow.CloseAll(); // 如果只是暂停的话 那么可以调用 // Pause(); // 再次恢复时间更新 // Start(); // 最后如果你需要查看此时update的状态话可以通过以下两个变量 // isPause // isStop timeFlow = TimeFlow.Create(this); // 时间执行器 // 了解了TimeFlow有时候觉得太繁琐 // 项目中根本不需要使用到那么就可以使用此类 // 这个类根据类似Task设计思想开发 // 但是他们还是有些区别,注意不管是这类函数操作中不要在包含一些特别耗时的操作 // 比如说 Thread.Sleep 这种 TimeCaller caller = TimeCaller.Create(2000, 10000, true); // 执行函数可以通过这个函数进行绑定,也可以在构造对象的时候写入 // 这个可以自行查看函数提示 我这边只是为了简单事例 caller.CallMethod((long count) => { Console.WriteLine("Hello TimeCaller"); }); // 接下来就是贯穿在以上两个类的一个重要类 // TimeFix 时间修正类 当然需要特殊处理时间循环的时候可以单独使用这个类 // 只需要告诉这个对象 想要的循环时间周期即可完成必要的时间修补 // 注意此类没有沉睡Sleep函数 所以等待需要自己处理 int periodNow = 1000; TimeFix timeFix = new TimeFix(1000); /* 这里我没有写Thread 那么就认为这个Thread开始 */ // 如果在一个循环中 这个函数应该就在循环的最开始处 timeFix.Begin(); // 沉睡相应时间 Thread.Sleep(periodNow); // 打印日志 Console.WriteLine("Hello TimeFix"); // 如果在一个循环中 这个函数应该在循环的最后结束 periodNow = timeFix.End(); /* 至此第一次Thread循环结束 第二次开始 */ timeFix.Begin(); Thread.Sleep(periodNow); Console.WriteLine("Hello TimeFix2"); periodNow = timeFix.End(); /* 以此循环往复 而periodNow的值会根据每次的耗时不同进行不断的修正 */ timeFlow.Start(); // 临时变量 测试时间流自动停止 StartTempTime(); // 需要gc回收一下 // 此处gc不会影响当前大括号的其他定时器,因为这个函数域还没结束 GC.Collect(); }
internal TimeFlow Create(string name) { rwlock.EnterWriteLock(); try { TimeFlow timeFlow; if (!timeFlows.TryGetValue(name, out timeFlow)) { var flowName = String.Format("TimeFlow.{0}", name); timeFlow = new TimeFlow(flowName); timeFlows.Add(name, timeFlow); timeFlow.Start().Attach(); } return(timeFlow); } finally { rwlock.ExitWriteLock(); } }
public PlayerAgent() { tf = TimeFlow.Create(this); tf.Start(); }