Thread定时器

一.定时器 (可以想到Time)

1.ThreadPool的定时器功能:

1
2
3
4
ThreadPool.RegisterWaitForSingleObject(new AutoResetEvent(true), new WaitOrTimerCallback((obj, b) =>
{
Console.WriteLine("obj={0},tid={1},datetime={2}", obj, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("hh:MM:ss"));
}), "hello word", 1000, false);

RegisterWaitForSingleObject():

1.(new AutoResetEvent(true):两个线程之间进行信号发送,当true无需等待,当为false,会等待1秒

False:

1572776249485

True:

2.new WaitOrTimerCallback():回调函数

3.”hello word”:传递参数

4.1000:定时器执行的间隔(单位毫秒)

5.false:是否仅执行一次

6.debug执行的效果如下:

2.Timer

有很多地方都有Timer:

  • System.Threading
  • System.Timer
  • System.Windows.Form
  • System.Web.UI
1
2
3
4
Timer timer = new Timer(new TimerCallback((obj) =>
{
Console.WriteLine("obj={0},tid={1},datetime={2}", obj, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("hh:MM:ss"));
}), "hello word", 1000, 1000);

1.new TimerCallback();回调函数

2.“hello word”:传递参数

3.1000:延迟执行的时间【单位毫秒】

4.1000:线程执行的时间间隔

Timer首先是用ThreadPool.UnsafeQueueUserWorkItem(waitCallback, timer);来完成定时功能。

三:实战开发中,基本上不会用Timer来处理问题

功能太少。

比如,每天早上8点启动一个线程,逻辑太多计算时间,开销大,费时费力。

四:开源框架解决定时的问题:Quarz.net