zoukankan      html  css  js  c++  java
  • 定时计算

     1     internal static class TimerDemo
     2     {
     3         //提供以指定的时间间隔对线程池线程执行方法的机制
     4         private static Timer timer;
     5 
     6         //这个方法签名必须和TimerCallback委托匹配
     7         private static void Status(object state)
     8         {
     9             //这个方法由一个线程池线程执行
    10             Console.WriteLine("In Status at {0}", DateTime.Now);
    11 
    12             //模拟其它工作
    13             Thread.Sleep(1000);
    14 
    15             //返回前让Timer在2秒后再次触发
    16             //更改计时器的启动时间和方法调用之间的间隔
    17             // 参数:
    18             //   dueTime:
    19             //     延迟之前调用的回调方法时指定的时间量 System.Threading.Timer 构造的以毫秒为单位。 指定 System.Threading.Timeout.Infinite
    20             //     以防止计时器重新启动。 指定零 (0) 可立即重新启动计时器。
    21             //
    22             //   period:
    23             //     回调方法的调用之间的时间间隔时指定 System.Threading.Timer 构造的以毫秒为单位。 指定 System.Threading.Timeout.Infinite
    24             //     可以禁用定期终止。
    25             timer.Change(2000, Timeout.Infinite);
    26         }
    27 
    28         public static void TimerMethod()
    29         {
    30             Console.WriteLine("Checking status every 2 seconds.");
    31 
    32             //创建但不启动计时器,确保timer在线程池线程调用Status之前引用该计时器
    33             // 参数:
    34             //   callback:
    35             //     一个 System.Threading.TimerCallback 委托,表示要执行的方法。
    36             //
    37             //   state:
    38             //     一个包含回调方法中,要使用信息的对象或 null。
    39             //
    40             //   dueTime:
    41             //     在之前的延迟时间量 callback 调用,以毫秒为单位。 指定 System.Threading.Timeout.Infinite 以防止启动计时器。
    42             //     指定零 (0) 可立即启动计时器。
    43             //
    44             //   period:
    45             //     调用之间的时间间隔 callback, ,以毫秒为单位。 指定 System.Threading.Timeout.Infinite 可以禁用定期终止。
    46             timer = new Timer(Status, null, Timeout.Infinite, Timeout.Infinite);
    47 
    48             //现在timer已被赋值,可以启动计时器了
    49             //现在在Status中调用Change,保证不会抛出NullReferenceException
    50             timer.Change(0, Timeout.Infinite);
    51         }
    52     }
    53 
    54     internal static class DelayDemo
    55     {
    56         //该方法可以获取想要的任何参数
    57         public static async void Status()
    58         {
    59             while (true)
    60             {
    61                 Console.WriteLine("Checking status at {0}", DateTime.Now);
    62 
    63                 //这里执行需要检查状态的代码
    64 
    65                 //在循环末尾,不阻塞线程的前提下延迟2秒
    66                 //await允许线程返回
    67                 await Task.Delay(2000);
    68                 //2秒后,某个线程会在await之后介入并继续循环
    69             }
    70         }
    71     }
        Timer对象被垃圾回收时,它的终结代码告诉线程池取消计时器,使它不再触发。所以,使用Timer对象时,要确定有一个变量在保持Timer对象的存活,否则对回调方法的调用就会停止。
  • 相关阅读:
    IT从业人员关注哪些问题
    Java实现 LeetCode 350 两个数组的交集 II(二)
    Java实现 LeetCode 349 两个数组的交集
    Java实现 LeetCode 349 两个数组的交集
    Java实现 LeetCode 349 两个数组的交集
    Java实现 LeetCode 347 前 K 个高频元素
    Java实现 LeetCode 347 前 K 个高频元素
    Java实现 LeetCode 347 前 K 个高频元素
    Java实现 LeetCode 345 反转字符串中的元音字母
    Java实现 LeetCode 345 反转字符串中的元音字母
  • 原文地址:https://www.cnblogs.com/xuejietong/p/8969919.html
Copyright © 2011-2022 走看看