博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
『C#基础』多线程笔记「三」计时器
阅读量:5032 次
发布时间:2019-06-12

本文共 2479 字,大约阅读时间需要 8 分钟。

在多线程中,有一个比较特殊的应用,就是计时器(Timer)。我在之前的一篇笔记中说过关于Timer控件的简单用法,这里我再根据一些新找的的内容,进行一些整理与扩展。

「」

命名空间:

 

这里可以看出,基本上每一个大类的应用都有其自己的Timer。而在这四个不同的Timer命名空间中的Timer中,在基础用法上,并没有看到有什么特殊的不同。

无论什么Timer,其最主要的还是Elapsed事件,与Start、Stop这两个方法。当然,还有多线程环境下的问题。

由于每一次当Timer的时间间隔到的时候,都会引发Elapsed事件,然后我们就可以在这个事件中写入相应的操作,来完成我们想要完成的任务了。

由于,每一次都会新开启一个线程来执行Elapsed事件中的操作,所以,在使用Timer的时候,就像之前的笔记中记录的一样,对于共享资源的同步上要进行相应的同步处理才好。不然就会引起不可预知的问题。

在使用Timer的时候,还要注意的是对于时间间隔的控制,这主要涉及到的CPU与内存的问题。

如果我们所要执行的操作很多,而时间间隔又设置的很短的话,就会造成不断的开启线程,并且不断的执行操作的问题。不断的开启线程,就会造成内存越来越多的问题,这里如果处理不好,很可能会导致整个系统的崩溃,而且在一旦这些操作中,有写入资源的操作,那么还很有可能造成死锁的情况。

所以在设计Timer的时候,一定要明确这样几件事情:

  1. 要定时执行的操作,一定要尽可能的短
  2. 如果有必要,就对Timer的正在执行的数量进行一定的控制
  3. 一定要有资源同步的控制,最起码,要有对同一个操作进行完结性检查后,再去执行

 

「MSDN示例」public class Class1 {    static System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();    static int alarmCounter = 1;    static bool exitFlag = false;    // This is the method to run when the timer is raised.    private static void TimerEventProcessor(Object myObject,                                            EventArgs myEventArgs) {       myTimer.Stop();       // Displays a message box asking whether to continue running the timer.       if(MessageBox.Show("Continue running?", "Count is: " + alarmCounter,           MessageBoxButtons.YesNo) == DialogResult.Yes) {          // Restarts the timer and increments the counter.          alarmCounter +=1;          myTimer.Enabled = true;       }       else {          // Stops the timer.          exitFlag = true;       }    }    public static int Main() {       /* Adds the event and the event handler for the method that will           process the timer event to the timer. */       myTimer.Tick += new EventHandler(TimerEventProcessor);       // Sets the timer interval to 5 seconds.       myTimer.Interval = 5000;       myTimer.Start();       // Runs the timer, and raises the event.       while(exitFlag == false) {          // Processes all the events in the queue.          Application.DoEvents();       }    return 0;    } }

 

 

「MSDN示例」
「MSDN示例」<%@ Page Language="C#" AutoEventWireup="true" %>    Timer Example Page        
Stock price is
as of
Page originally created at

转载于:https://www.cnblogs.com/sitemanager/archive/2012/03/29/2422953.html

你可能感兴趣的文章
sublime复制当前行到下一行
查看>>
WPF 3D变换应用
查看>>
luogu4012 深海机器人问题 网络流
查看>>
android 拍照上传照片
查看>>
ArchLinux安装开源VMware Tools
查看>>
系统用户分析模型
查看>>
DB2 锁升级示例1
查看>>
16.RDD实战
查看>>
MainFrame知识小结(20120210)—dfsort/syncsort中的数据类型
查看>>
jsp题库 (一)小测(25/21)
查看>>
D - Flip tile
查看>>
Java连接RabbitMQ之创建连接
查看>>
开户vim编程之--cscope支持
查看>>
python数据类型图解
查看>>
C#微信登录-手机网站APP应用
查看>>
HTML5实践 -- iPhone Safari Viewport Scaling Bug
查看>>
一位数据挖掘成功人士 给 数据挖掘在读研究生 的建议
查看>>
Python3.6.0安装
查看>>
hdu1049
查看>>
H5项目常见问题及注意事项
查看>>