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(); }
private void StartTempTime() { TimeCaller caller = TimeCaller.Create(1000, 10000, true); // 执行函数可以通过这个函数进行绑定,也可以在构造对象的时候写入 // 这个可以自行查看函数提示 我这边只是为了简单事例 caller.CallMethod((long count) => { Console.WriteLine("Hello TimeCaller2"); }); // 时间流 for (int i = 0; i < 100; i++) { new Time2(); } }
public void OnOpen(HyperSocket socket) { // timeCaller1[i] = new TimeCaller(rd.Next(1000, 5000), rd.Next(500, 1000), true, -1, () => // { // socket.SendTcp(1.ToString()); // }); fff = true; Console.WriteLine($"Connect Num:{++num}"); // Console.WriteLine($"Connect OK:{socket.SessionId}"); timeCaller2[index++] = TimeCaller.Create(1000, 50, true, -1, (long count) => { socket.SendUdp(count.ToString()); }); }