[图片]using System;
[图片]using System.Collections.Generic;
[图片]using System.Windows.Forms;
[图片]using System.Timers;
[图片]using System.Threading;
[图片]
[图片]namespace WindowsApplication3
[图片][图片][图片]{
[图片] static class Program
[图片][图片] [图片]{
[图片][图片] /**//// <summary>
[图片] /// 应用程序的主入口点。
[图片] /// </summary>
[图片] [STAThread]
[图片] static void Main()
[图片][图片] [图片]{
[图片] //System.Threading.Timer thrTimer = new System.Threading.Timer();
[图片]
[图片]
[图片]
[图片]
[图片] System.Timers.Timer timer = new System.Timers.Timer();
[图片] timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
[图片]
[图片] timer.AutoReset = true;
[图片] timer.Interval =20;
[图片]
[图片] System.Threading.Timer timerClose;
[图片] //解决初次进入timer调用函数时多线程同时访问函数的问题
[图片] //Threading和Timers的timer都存在此问题分析后初步判断是初次运行前的间隔时间的问题
[图片] //Timers的无法设置初次启动前间隔所以设置20ms间隔时第一次进入前的间隔也是20ms
[图片] //Threading的可以设置初次启动前的间隔,设置较大间隔后启动,便没有了初次运行时多线程同时进入的情况。
[图片] //timerClose = new System.Threading.Timer(new TimerCallback(timerCall), null , 1000, 20);
[图片] //timerClose = new System.Threading.Timer(new TimerCallback(timerCall), null , 20, 20);
[图片] //timer.Start();
[图片]
[图片]
[图片] Application.EnableVisualStyles();
[图片] Application.SetCompatibleTextRenderingDefault(false);
[图片] Application.Run(new Form1());
[图片] }
[图片] public static void timer_Elapsed(object sender, ElapsedEventArgs e)
[图片][图片] [图片]{
[图片] Console.Out.WriteLine("system :"+DateTime.Now + " " + DateTime.Now.Millisecond + " "+DateTime .Now.TimeOfDay.TotalMilliseconds );
[图片]
[图片] }
[图片] //object oo = new object();
[图片] //static int inTimer = 0;
[图片] public static void timerCall(object obj)
[图片][图片] [图片]{
[图片]
[图片] //timerClose.Dispose();
[图片] //lock (this)
[图片] //if (Interlocked.Exchange(ref inTimer, 1) == 0)
[图片][图片] [图片]{
[图片] //Console.Out.WriteLine(Environment.TickCount);
[图片] Console.Out.WriteLine("Threading:" + DateTime.Now + " " + DateTime.Now.Millisecond + " " + DateTime.Now.TimeOfDay.TotalMilliseconds);
[图片] //this.Close();
[图片] //Interlocked.Exchange(ref inTimer, 0);
[图片] }
[图片]
[图片] }
[图片]
[图片]
[图片]
[图片]
[图片] }
[图片]}