结合singleton和线程做一个定时服务(给蓝) - 中国WEB开发者网络 (http://www.webasp.net) -- 技术教程 (http://www.webasp.net/article/) --- 结合singleton和线程做一个定时服务(给蓝) (http://www.webasp.net/article/5/4225.htm) |
| -- 作者:未知 -- 发布日期: 2003-07-12 |
| 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 ; } } } |
| webasp.net |