结合singleton和线程做一个定时服务

结合singleton和线程做一个定时服务


Author: bigeagle  &;nbspFrom:Internet


                design pattern的singleton是一个虽然简单但很有用处的模式,它的作用就是使类只能有一个实例,不需要实例化,而提供一个唯一的全局切入点。如果再结合上线程,完全可以实现一个定时服务,不象Timer控件,它不仅可以应用在windows应用程序中,同样可以应用于web程序中,就象刚才蓝说的那种效果。看下面这个简单的例子吧。
 
  using System;
  using System.Threading ;
 
  namespace testall
  {
      /// <summary>
      /// 一个web job的示例类
      /// </summary>
      /// <remarks>符合design pattern的singleton模式</remarks>
      public class TestStatic
      {
          /// <summary>
          /// 定时间隔
          /// </summary>
          /// <remarks>通过修改这个常量决定间隔多长时间做某件事</remarks>
          const int DELAY_TIMES = 1000 ;
 
          /// <summary>
          /// 一个计数器
          /// </summary>
          private int m_intCounter = 0;
 
          /// <summary>
          /// 是否退出
          /// </summary>
          private bool m_bCanExit = false ;
 
          /// <summary>
          /// 线程
          /// </summary>
          private Thread thread ;
 
          /// <summary>
          /// 自身实例
          /// </summary>
          /// <remarks>注意,这是实现singleton的关键</remarks>
          private  static TestStatic instance = new TestStatic() ;
 
          public int Counter
          {
              get
              {
                  return this.m_intCounter ;
              }
              set
              {
                  this.m_intCounter = value ;
              }
          }
 
          public bool CanExit
          {
              set
              {
                  this.m_bCanExit = value ;
              }
          }
 
          /// <summary>
          /// 构造函数
          /// </summary>
          public TestStatic()
          {
              //
              // TODO: Add constructor logic here
              //
              this.m_intCounter = 0 ;
              Console.WriteLine("constructor is running") ;
              this.thread = new Thread(new ThreadStart(ThreadProc)) ;
              thread.Name = "online user" ;
              thread.Start() ;
              Console.WriteLine("完毕") ;
          }
 
 
          /// <summary>
          /// 实现singleton的关键
          /// </summary>
          /// <returns>类本身的一个实例</returns>
          /// <remarks>唯一的全局切入点</remarks>
          public static TestStatic GetInstance()
          {
              return instance ;
          }
 
          /// <summary>
          /// 线程工作函数
          /// </summary>
          /// <remarks>想做什么写在这儿</remarks>
          private void ThreadProc()
          {
              while(!this.m_bCanExit)
              {
                  this.m_intCounter    ;
                  Console.WriteLine(this.m_intCounter.ToString()) ;
                  Thread.Sleep(DELAY_TIMES) ;
              }
          }
 
          static void Main(string[] args)
          {
              //
              // TODO: Add code to start application here
              //
              Console.WriteLine(TestStatic.GetInstance().Counter.ToString()) ;
              Console.Read() ;
              TestStatic.GetInstance().CanExit = true ;
          }
 
      }
 
  }
 
    (2005-9-11:08:10)
 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 警告:持续变种木马正在发起农历新年攻势!
 您可能对 [C#] 的这些文章也感兴趣:
C#异步编程
C# and VB .NET Libraries to Google, and other Web 2.0 APIs
匿名函数的使用
用C#对Illustrator矢量图形软件进行编程
是该放弃loop语句的时候了吗?
C#中使用GDI+制作个性化的网站新闻标题
获得C#方法调用源
c#中通过设置钩子监视鼠标移动
程序实现更换IP(C#)
C#实现笔记本上网设置的切换(附代码)
简易C#的IDE
自定义C#加密方法