下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档-下载后可编辑Timer定时器的设计方法-基础电子在系统开发过程中经常用到定时器进行定时处理,比如比较常见的邮件群发、实时更新论坛的在线人数、文章数、点击率等。很多情况下,我们不能对某一状态或者某一行为进行实时监控,所以就希望系统能够实现这一功能。通过多线程技术可以使得定时器的性能更高。尽管定时器能够自动处理或者一些批处理操作,但是定时器也给系统带来一定的安全隐患,特别是当定时进行的操作出现bug时,如果没有对Exception做出及时的处理,系统资源将会大大的浪费,严重的情况下,可能导致系统崩溃。因此,对于定时器的使用一定要慎重,至少要保证定时处理的行为出现异常的可能性很小,并在出现Exception的情况下及时处理。System.Threading.Timer是一个非常常用的定时器类,是一个使用回调方法的计时器,而且由线程池线程服务,简单且对资源要求不高。publicTimer(TimerCallbackcallback,Objectstate,TimeSpandueTime,TimeSpanperiod)参数callback一个TimerCallback委托,表示要执行的方法。state一个包含回调方法要使用的信息的对象,或者为空引用(在VisualBasic中为Nothing)。dueTimeTimeSpan,表示在callback参数调用它的方法之前延迟的时间量。指定-1毫秒以防止启动计时器。指定零(0)以立即启动计时器。period在调用callback所引用的方法之间的时间间隔。指定-1毫秒可以禁用定期终止。方法、原理使用TimerCallback委托指定希望Timer执行的方法。计时器委托在构造计时器时指定,并且不能更改。此方法不在创建计时器的线程上执行,而是在系统提供的ThreadPool线程上执行。创建计时器时,可以指定在次执行方法之前等待的时间量(截止时间)以及此后的执行期间等待的时间量(时间周期)。可以使用Change方法更改这些值或禁用计时器。当不再需要计时器时,请使用Dispose方法释放计时器持有的资源。如果希望在计时器被释放时接收到信号,请使用接受WaitHandle的Dispose(WaitHandle)方法重载。计时器已被释放后,WaitHandle便终止。由计时器执行的回调方法应该是可重入的,因为它是在ThreadPool线程上调用的。备注:在超过dueTime以后及此后每隔period时间间隔,都会调用callback参数所指定的委托。如果dueTime为零(0),则立即调用callback。如果dueTime是-1毫秒,则不会调用callback;计时器将被禁用,但通过调用Change方法可以重新启用计时器。如果period为零(0)或-1毫秒,而且dueTime为正,则只会调用callback;计时器的定期行为将被禁用,但通过使用Change方法可以重新启用该行为。简单的定时器usingSystem;usingSystem.Threading;publicclassTestTimer{/**////summary///定时器////summaryprivateTimeriTimer;/**////summary///constructor////summarypublicTestTimer(){iTimer=newSystem.Threading.Timer(newTimerCallback(Doing));iTimer.Change(TimeSpan.FromMinutes(5),TimeSpan.FromMinutes(5));}/**////summary///////summary///paramname="nObject"/parampublicvoidDoing(objectnObject){//dosomething}}一个比较完整的计时器:下面是我设计的一个简单实例。在一个问卷调查系统中,每一张问卷都有其终止日期,当到达了终止日期时,需要系统自动将其关闭。这就需要定时器对问卷的状态和终止日期进行实时监控,及时关闭。这里采用了一个简单的单件模式来操作、控制定时器。这里主要的操作包括定时器开始、终止、执行。PaperManager管理类/**////summary///管理类////summarypublicclassPaperManager{/**////summary///定时器////summaryprivateTimeriTimer;/**////summary///启动时间////summaryprivateTimeSpandueTime;/**////summary///方法调用间隔////summaryprivateTimeSpanperiod;/**////summary///委托////summaryprivateTimerCallbacktimerDelegate;/**////summary///静态实例////summaryprivatestaticreadonlyPaperManagerself=newPaperManager();/**////summary///构造函数////summarypublicPaperManager(){timerDelegate=newTimerCallback(CheckStatus);}/**////summary///////summary///returns/returnspublicstaticPaperManagergetInstance(){returnself;}/**////summary///设置启动时间间隔////summary///paramname="days"天/param///paramname="hours"小时/param///paramname="minutes"分钟/param///paramname="seconds"秒/param///paramname="milisecond"毫秒/parampublicvoidsetDueTime(intdays,inthours,intminutes,intseconds,intmilisecond){dueTime=newTimeSpan(days,hours,minutes,seconds,milisecond);}/**////summary///设置回调时间间隔
////summary///paramname="days"天/param///paramname="hours"小时/param///paramname="minutes"分钟/param///paramname="seconds"秒/param///paramname="milisecond"毫秒/parampublicvoidsetPeriod(intdays,inthours,intminutes,intseconds,intmilisecond){period=newTimeSpan(days,hours,minutes,seconds,milisecond);}/**////summary///开始////summarypublicvoidStart(){AutoResetEventautoEvent=newAutoResetEvent(false);dueTime=TimeSpan.FromSeconds(0);period=TimeSpan.FromSeconds(10);iTimer=newTimer(timerDelegate,autoEvent,dueTime,period);autoEvent.WaitOne(5000,false);iTimer.Change(dueTime,period);}/**////summary///停止////summarypublicvoidStop(){iTimer.Dispose();}/**////summary///执行////summarypublicvoidExcuteOneTime(){if(iTimer!=null){iTimer.Dispose();}//如果period为零(0)或-1毫秒,而且dueTime为正,则只会调用callback;//计时器的定期行为将被禁用,但通过使用Change方法可以重新启用该行为。setDueTime(0,0,0,0,1);setPeriod(0,0,0,0,-1);AutoResetEventautoEvent=newAutoResetEvent(false);iTimer=newTimer(timerDelegate,autoEvent,dueTime,period);autoEvent.WaitOne(5000,false);iTimer.Change(dueTime,period);}/**////summary///行为////summary///paramname="nObject"/parampublicvoidCheckStatus(objectnObject){AutoResetEventautoEvent=(AutoResetEvent)nObject;if(ExcuteUpdate()){autoEvent.Set();}}/**////summary///更新////summary///returns/returnsprivateboolExcuteUpdate(){try{//应该从数据库获得Paper对象的集合,这里简略//ListPaperpaperList=getPaperList();ListPaperpaperList=newListPaper();foreach(PaperiteminpaperList){if(item.EndTime=DateTime.Now){if(item.Status==Paper.StatusOfNormal){item.Status=Paper.StatusOfTerminate;}}}/**/////执行数据更新,这里省略returntrue;}catch{returnfalse;}}}这是问卷的实体类,只是简单的列出必要的属性。Paper实体类/**////summary///实体类////summarypublicclassPaper{/**////summary///终止时间////summarypublicDateTimeEndTime;/**////summary///状态////summarypublicintStatus;/**////summary///正常////summarypublicconstintStatusOfNormal
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024至2030年中国石茶几行业投资前景及策略咨询研究报告
- 2024至2030年中国油压开关行业投资前景及策略咨询研究报告
- 2024至2030年中国多层画报架行业投资前景及策略咨询研究报告
- 山东省安全员B证考试题库附答案
- 上海市安全员A证考试题库附答案
- 湖北省安全员B证考试题库
- 办公室项目管理方法与最佳实践考核试卷
- 跨境电商物流运输合同指南
- 吉林工商学院《酒店餐饮服务与管理实训》2023-2024学年第一学期期末试卷
- 《基于财务管理视角企业纳税筹划的研究》
- 华文版书法五年级下册 第9课 集字练习-集思广益 教案
- 人教版四年级数学上册四年级数学上册典型例题系列之第4单元:“买几送几”促销问题专项练习(解析版)人教版
- 学校(幼儿园)食堂餐厨废弃物处理记录表
- 高性能计算云(HPC Clound)服务白皮书 2022
- 青岛科技大学互换性与技术测量期末复习题
- 高级教师职称面试讲课答辩题目及答案(分五类共60题)
- 宣传品制作售后服务
- 《皇帝的新装》比赛优质课一等奖课件
- LED洗墙灯CREE管工艺技术文件
- 认知觉醒:开启自我改变的原动力
- Python语言与经济大数据分析知到章节答案智慧树2023年上海财经大学
评论
0/150
提交评论