C#中Thread.Time的使用

Thread.Time的使用(线程同步处理之一)

这个类主要是开启一个线程,然后实现按照指定的周期,定期的调用指定的某个函数,实现了定期调用一个函数或程序的办法。
比如想让一个后台程序,定期检查是否收到邮件,或者让一个后台线程定期输出当前时间等。
改造了一下官方案例:

代码块

using System;
using System.Threading;

class TimerExample
{
static void Main()
{
AutoResetEvent autoEvent = new AutoResetEvent(false);
/*上面这句:线程等待的类对象线程等待的类对象,前面在多线程中已经提过,作用是让调用autoEvent.waitone()的程序,在调用处停下来
然后,等待调用autoEvent.set(); 的另一个程序,用此语句发来信号,信号的意思是,告诉autoEvent.waitone()你可以往下继续执行了*/

    StatusChecker statusChecker = new StatusChecker(10);下面定义好的类,这里实例化一个对象,利用构造函数传入值  
    Timer stateTimer = new Timer(new TimerCallback(statusChecker.CheckStatus), autoEvent, 1000, 250);
    //这个函数是单独开辟的线程,是自动按周期执行,直到调用dispose(),否则该线程一直执行下去
    //参数1.TimerCallback委托的对象,2.想要给printTime传入的参数3.开始之前需要等待多久(毫秒单位)3.每次调用的时间间隔
    autoEvent.WaitOne();//当前线程(现在的主线程)先在这里停下来,等待一个信号,信号来了就往下继续执行!
    stateTimer.Change(0, 500);//收到第一次信号,那我改变一下计时的子线程的函数的调用周期,这里是改变上面Timer中设定的250那个周期值
    Console.WriteLine("\n把调用周期改为1秒一次,等待\n");

    autoEvent.WaitOne();//再次收到信号,信号表示子函数计数又一次到10了
    stateTimer.Dispose();//关闭计时线程的一个命令,如果没有这个命令,那么stateTimer调用子函数会一直执行下去,按照指定周期
    Console.WriteLine("\nDestroying timer.,当前线程:" + Thread.CurrentThread.ManagedThreadId);
    //Console.ReadKey();
}

}

class StatusChecker
{
private int invokeCount;
private int maxCount;

public StatusChecker(int count)
{
    invokeCount = 0;
    maxCount = count;
}

// This method is called by the timer delegate.
public void CheckStatus(Object stateInfo)//被调用的,被TimerCallback委托的函数,必须是具有object 形参且必须为void的返回值的
{
    Thread T = Thread.CurrentThread;
    T.Name = "子线程";
    AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;//从委托函数中传来的参数
    Console.WriteLine("{0} Checking status {1,2}.", DateTime.Now.ToString("h:mm:ss.fff"), (++invokeCount).ToString() + "当前线程 ID : " + Thread.CurrentThread.ManagedThreadId + "当前线程 名称:" + Thread.CurrentThread.Name);

    if (invokeCount == maxCount)
    {
        invokeCount = 0;
        autoEvent.Set();子函数执行到这里开始发送信号,告诉主程序你可以往下执行,但是这个函数是不停的按照周期被调用的,直到调用了dispose();
    }
}

}

脚注

生成一个脚注1.


  1. 文献参考.
    https://msdn.microsoft.com/en-us/library/ms149618(v=vs.110).aspx ↩

你可能感兴趣的:(Unity与c#,c#-thread,timer)