zoukankan      html  css  js  c++  java
  • C# System.Threading.Timer

    提供以指定的时间间隔对线程池线程执行方法的机制

     1 using System;
     2 using System.Threading;
     3 
     4 class TimerExample
     5 {
     6     static void Main()
     7     {
     8         // Create an AutoResetEvent to signal the timeout threshold in the
     9         // timer callback has been reached.
    10         var autoEvent = new AutoResetEvent(false);
    11         
    12         var statusChecker = new StatusChecker(10);
    13 
    14         // Create a timer that invokes CheckStatus after one second, 
    15         // and every 1/4 second thereafter.
    16         Console.WriteLine("{0:h:mm:ss.fff} Creating timer.
    ", 
    17                           DateTime.Now);
    18         var stateTimer = new Timer(statusChecker.CheckStatus, 
    19                                    autoEvent, 1000, 250);
    20 
    21         // When autoEvent signals, change the period to every half second.
    22         autoEvent.WaitOne();
    23         stateTimer.Change(0, 500);
    24         Console.WriteLine("
    Changing period to .5 seconds.
    ");
    25 
    26         // When autoEvent signals the second time, dispose of the timer.
    27         autoEvent.WaitOne();
    28         stateTimer.Dispose();
    29         Console.WriteLine("
    Destroying timer.");
    30     }
    31 }
    32 
    33 class StatusChecker
    34 {
    35     private int invokeCount;
    36     private int  maxCount;
    37 
    38     public StatusChecker(int count)
    39     {
    40         invokeCount  = 0;
    41         maxCount = count;
    42     }
    43 
    44     // This method is called by the timer delegate.
    45     public void CheckStatus(Object stateInfo)
    46     {
    47         AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
    48         Console.WriteLine("{0} Checking status {1,2}.", 
    49             DateTime.Now.ToString("h:mm:ss.fff"), 
    50             (++invokeCount).ToString());
    51 
    52         if(invokeCount == maxCount)
    53         {
    54             // Reset the counter and signal the waiting thread.
    55             invokeCount = 0;
    56             autoEvent.Set();
    57         }
    58     }
    59 }
    60 // The example displays output like the following:
    61 //       11:59:54.202 Creating timer.
    62 //       
    63 //       11:59:55.217 Checking status  1.
    64 //       11:59:55.466 Checking status  2.
    65 //       11:59:55.716 Checking status  3.
    66 //       11:59:55.968 Checking status  4.
    67 //       11:59:56.218 Checking status  5.
    68 //       11:59:56.470 Checking status  6.
    69 //       11:59:56.722 Checking status  7.
    70 //       11:59:56.972 Checking status  8.
    71 //       11:59:57.223 Checking status  9.
    72 //       11:59:57.473 Checking status 10.
    73 //       
    74 //       Changing period to .5 seconds.
    75 //       
    76 //       11:59:57.474 Checking status  1.
    77 //       11:59:57.976 Checking status  2.
    78 //       11:59:58.476 Checking status  3.
    79 //       11:59:58.977 Checking status  4.
    80 //       11:59:59.477 Checking status  5.
    81 //       11:59:59.977 Checking status  6.
    82 //       12:00:00.478 Checking status  7.
    83 //       12:00:00.980 Checking status  8.
    84 //       12:00:01.481 Checking status  9.
    85 //       12:00:01.981 Checking status 10.
    86 //       
    87 //       Destroying timer.
     1 using System;
     2 using System.Threading;
     3 
     4 class TimerExample
     5 {
     6     public static int loop_index = 1;
     7     public static AutoResetEvent autoEvent = new AutoResetEvent(false);
     8     
     9     static void Main()
    10     {
    11         int loop_count = 10;
    12         
    13         // Create an AutoResetEvent to signal the timeout threshold in the
    14         // timer callback has been reached.
    15         
    16 
    17         // Create a timer that invokes CheckStatus after one second, 
    18         // and every 1/4 second thereafter.
    19         Console.WriteLine("{0:h:mm:ss.fff} Creating timer.
    ", 
    20                           DateTime.Now);
    21         var stateTimer = new Timer(show, 
    22                                    autoEvent, 1000, 1000);
    23 
    24         // When autoEvent signals, change the period to every half second.
    25         autoEvent.WaitOne();
    26         stateTimer.Change(0, 500);
    27         Console.WriteLine("
    Changing period to .5 seconds.
    ");
    28 
    29         // When autoEvent signals the second time, dispose of the timer.
    30         autoEvent.WaitOne();
    31         stateTimer.Dispose();
    32         Console.WriteLine("
    Destroying timer.");
    33     }
    34     
    35     public static void show(Object stateInfo)
    36     {
    37         Console.WriteLine("{0:h:mm:ss.fff} Run in Show.
    ", 
    38                           DateTime.Now);
    39         Console.WriteLine(loop_index);
    40         loop_index = loop_index + 1;
    41         if (loop_index > 10)
    42         {
    43             autoEvent.Set();
    44         }
    45     }
    46 }

    构造函数 

    Timer(TimerCallback)

    使用新创建的 Timer 对象作为状态对象,用一个无限周期和一个无限到期时间初始化Timer 类的新实例。

    Timer(TimerCallback, Object, Int32, Int32)

    使用 32 位的有符号整数指定时间间隔,初始化 Timer 类的新实例。

    Timer(TimerCallback, Object, Int64, Int64)

    用 64 位有符号整数来度量时间间隔,以初始化 Timer 类的新实例。

    Timer(TimerCallback, Object, TimeSpan, TimeSpan)

    初始化 Timer 类的新实例,使用 TimeSpan 值来度量时间间隔。

    Timer(TimerCallback, Object, UInt32, UInt32)

    用 32 位无符号整数来度量时间间隔,以初始化 Timer 类的新实例。

    方法 

    Change(Int32, Int32)

    更改计时器的启动时间和方法调用之间的间隔,用 32 位有符号整数度量时间间隔。

    Change(Int64, Int64)

    更改计时器的启动时间和方法调用之间的间隔,用 64 位有符号整数度量时间间隔。

    Change(TimeSpan, TimeSpan)

    更改计时器的启动时间和方法调用之间的时间间隔,使用 TimeSpan 值度量时间间隔。

    Change(UInt32, UInt32)

    更改计时器的启动时间和方法调用之间的间隔,用 32 位无符号整数度量时间间隔。

    CreateObjRef(Type)

    创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。

    (Inherited from MarshalByRefObject)
    Dispose()

    释放由 Timer 的当前实例使用的所有资源。

    Dispose(WaitHandle)

    释放 Timer 的当前实例使用的所有资源并在释放完计时器时发出信号。

    Equals(Object)

    确定指定的对象是否等于当前对象。

    (Inherited from Object)
    GetHashCode()

    作为默认哈希函数。

    (Inherited from Object)
    GetLifetimeService()

    检索控制此实例的生存期策略的当前生存期服务对象。

    (Inherited from MarshalByRefObject)
    GetType()

    获取当前实例的 Type

    (Inherited from Object)
    InitializeLifetimeService()

    获取生存期服务对象来控制此实例的生存期策略。

    (Inherited from MarshalByRefObject)
    MemberwiseClone()

    创建当前 Object 的浅表副本。

    (Inherited from Object)
    MemberwiseClone(Boolean)

    创建当前 MarshalByRefObject 对象的浅表副本。

    (Inherited from MarshalByRefObject)
    ToString()

    返回表示当前对象的字符串。

    (Inherited from Object)
  • 相关阅读:
    努力的一分不会少
    C语言中的数组的访问方式
    代码的规划与规范化
    Manjaro中源码安装gcc7.1
    周围都是敌人,方法总比问题多
    elementary os 0.4.1下编译GCC-7.1源码并安装成功
    C语言中的基础知识变量探讨
    19年的桌面KDE的风雨和陪伴,没有什么能够割舍
    《手把手教你学C语言》学习笔记(10)--- 程序的循环控制
    copy 的实现原理与深浅拷贝
  • 原文地址:https://www.cnblogs.com/hushaojun/p/10603363.html
Copyright © 2011-2022 走看看