`

FCL中三个定时器的区别

阅读更多
原帖地址:http://www.cnblogs.com/shuonar/archive/2013/06/03/3114759.html

FCL中提供了三个定时器,而对于大多数程序员来说,他们不太清楚这三个定时器之间的区别。


         下面我们对这三个定时器进行分析:


         System.Threading的Timer类,这个定时器使我们最常用的定时器,当我们希望在另一个线程上定时执行后台任务时,这个定时器是最好的选择。


         System.Windows.Forms的Timer类  构建一个该类的实例可以告诉Windows将定时器与调用线程关联。随着定时器的触发,Windows将一个定时器消息(WM_TIMER)插入到线程的消息队列中。调用线程必须执行一个消息泵(message pump),从而提取消息,并将他们分派到期望的回调方法中。注意,所有这些工作都是由一个线程完成的----设置定时器的线程保证是执行回调方法的线程。这同样意味着我们的定时器方法不能被多个线程同时执行。


         System.Timers的Timer类 该定时器基本上是对System.Threading的Timer类的包装,当定时器时间到期后,将导致CLR将事件加入线程池的队列中。Component类允许将这些定时器对象放置在Microsoft Visual Studio设计界面上。另外,System.Timers.Timer类的成员也有点不同。这个类在数年前就被添加到FCL中了,而那时Microsoft仍然在对线程处理和定时器材质进行分类。这个类或许被移除,以便于每个人都可以使用System.Threading的Timer类。实际上,我们从来不使用System.Timer.Timer类,而且我还劝大家不要使用这个类,除非大家这的希望在设计界面上使用定时器。


 


         下面是一个System.Threading的Timer类例子,这个类是我们经常使用的:



using System;
using System.Threading;

namespace TestTimer
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine(
"主线程:正在启动Timer");
//ComputeBoundOp是被执行的函数
Timer t = new Timer(ComputeBoundOp, 5, 0, 2000);

Console.WriteLine(
"主线程: 正在工作。。。");
Thread.Sleep(
10000); //模拟工作(10秒钟)
t.Dispose(); //取消定时器
}

/// <summary>
/// 该方法的签名必须与TimerCallback委托类型匹配
/// </summary>
/// <param name="state"></param>
private static void ComputeBoundOp(Object state)
{
//该方法由线程池中的线程执行
Console.WriteLine("在ComputeBoundOp中: state={0}", state);
Thread.Sleep(
1000); //模拟其他工作(1秒钟)

//在这个方法返回后,线程就回到线程池中,然后等待执行另一个任务
}
}
}


 


  当Timer对象被执行垃圾收集时,CLR就会取消定时器,以便定时器不再继续触发,因此,使用Timer对象时,一定要确保一个变量来引用Timer对象,从而保持Timer对象继续存活,否则回调方法就不会再被调用。


  Timer t = new Timer(ComputeBoundOp, 5, 0, 2000);这段代码中,ComputeBoundOp是线程回调的方法,5是构造器的state参数,它允许我们将状态数据传递给回调方法,如果没有状态数据可传递,可以传递null。0是dueTime参数,dueTime参数可以告诉CLR在第一次调用回调方法时需要等待多少毫秒。在这里设置为0,表示希望回调方法立即被调用。2000是period参数,它表示回调方法执行的间隔时间,这里我们设置的是2000毫秒.


   更多原创内容,可以到我的小站进行阅读,欢迎拍砖。

本文链接

分享到:
评论

相关推荐

    FCL框架C#版本

    2. **WagweiWebSrv**:这个可能是Web服务相关的代码,使用FCL中的System.Web命名空间,包含了ASP.NET的核心类,如HttpApplication、HttpHandler和HttpModule等,允许开发者创建和托管Web服务。开发者可以利用这些类...

    RENESAS_FCL_RH850_T01_V2.12.zip

    在这款名为"RENESAS_FCL_RH850_T01_V2.12.zip"的压缩包中,包含的是Renesas RH850系列微控制器的FCL(Flash Controller Library)Cflash自编程代码,版本为V2.12。本文将深入解析这一代码库的重要知识点。 1. **RH...

    fcl_VC++源码_

    "FCL (Free Class Library)" 是一个为 Visual C++ 开发者设计的高级接口库,它提供了许多方便的功能,旨在简化编程工作,提高开发效率。FCL 主要关注于面向对象编程,面向接口的设计,以及一些常用的实用工具类,...

    fcl flexible collision library 碰撞检测库源码

    fcl flexible collision library 碰撞检测库源码

    fcl_fcl_.fcl打开软件_Free!_Vc_smallertu4_

    标题中的“fcl_fcl_.fcl打开软件_Free!_Vc_smallertu4_”表明这是一个关于FCL(Free Class Library)的项目,可能是FCL库的一个版本或者与之相关的开发工具。FCL是一个针对VC++(Visual C++)的高级界面类库,它提供...

    ccd 库源码,fcl 碰撞检测库的依赖库

    ccd 库源码,fcl 碰撞检测库的依赖库

    PyPI 官网下载 | python_fcl-0.0.12-cp27-cp27mu-manylinux1_x86_64.whl

    这个库可能是用于处理某种特定功能或问题的,但由于描述中没有具体说明其用途,我们只能通过名字推测可能与FCL(Flexible Configuration Language)或者类似的配置管理有关。FCL通常指的是用于定义和处理复杂系统...

    fcl.rar_fcl_matlab fcl_parallel resonance_resonance

    在这个模型中,我们可以期待看到电力系统、FCL 设备以及并联谐振电路的详细结构和参数设置。通过仿真运行,可以观察到在发生短路时 FCL 如何控制电流,以及并联谐振如何影响系统的响应。 综合以上信息,这个项目...

    瑞萨RH850 F1K R7F7015873 FCL库的demo程序

    这个测试程序可能是为了验证FCL库的功能,或者提供给开发者作为参考,以便他们在自己的项目中集成和使用FCL库。 在开发过程中,首先需要设置CS+的工作环境,导入或创建一个新项目,并选择R7F7015873作为目标芯片。...

    FCL.rar_Free!_fcl

    FCL(Free Class Library)是一个跨平台的类库,这意味着它可以在多个操作系统上运行,包括但不限于Windows、Linux和Mac OS。这个库的核心设计理念是免费、开源和易于使用,因此对于那些希望在不同平台上实现一致的...

    VC 高级界面类库FCL(Free Class Library)源程序.rar

    VC 高级界面类库FCL(Free Class Library),自由类库(Free Class Library 简称FCL),关于VC FCL高级界面库的几点说明:  1、本套类库目前还不能算是正式版,就连名字也是临时取的。发布它的目的是希望能和有着共同...

    碰撞检测开源工具箱

    今天我们将深入探讨一个名为FCL(Flexible Collision Library)的开源工具箱,它是碰撞检测领域中的一个重要工具。 FCL,全称为“Flexible Collision Library”,由潘佳等人开发,是一个用C++编写的高效且可扩展的...

    FCL.rar_Limiter_current limiter_fault current_fault limiter_fcl

    【标题】"FCL.rar_Limiter_current limiter_fault current_fault limiter_fcl" 提供的信息表明,这是一个关于电力系统中故障电流限制器(Fault Current Limiter, FCL)的MATLAB Simulink模型。FCL是一种重要的电力...

    基于MATLAB环境下的FCL限流效果仿真分析.rar

    总的来说,基于MATLAB环境下的FCL限流效果仿真分析是一个综合性的研究任务,它涵盖了电力系统建模、故障条件设定、FCL原理应用、系统性能评估等多个环节。通过这样的仿真,我们可以深入理解FCL的工作机制,为实际...

    FCL-Parser:JavaScript (node.js) 中模糊控制语言 (FCL) 的解析器

    您现在可以通过这个 git 存储库安装它: npm install git+http://github.com/cvette/FCL-Parser.git###Usage 解析器可以直接在 JavaScript 中使用,也可以通过命令行界面使用。 ####JavaScript 解析指定的输入并...

    FNHHCAQ FCL 123

    显示屏刷新:调节显示屏刷新的hz数,设置的越快效果越平稳,但是带的面积也会变小,所以这个要根据所控制的屏幕的实际大小,实验着调节。刷新调的越快也会使特技效果变慢。刷新调节过快导致黑屏,只要调节慢一些再...

    基于MATLAB环境下的FCL限流效果仿真分析.pdf

    基于MATLAB环境下的FCL限流效果仿真分析.pdf

    行业分类-电子-FCL串联电容MOV过电流触发GAP保护仿真装置的说明分析.rar

    标题中的“行业分类-电子-FCL串联电容MOV过电流触发GAP保护仿真装置的说明分析”揭示了本文档将探讨的主题,主要集中在电子行业中,特别是关于FCL(快速电流限制)系统,其中涉及到串联电容、MOV(金属氧化物压敏...

    行业分类-电子-FCL线路电流监视告警仿真装置的说明分析.rar

    标题中的“FCL线路电流监视告警仿真装置”是指一种用于电力系统中的故障电流限制(Fault Current Limiter, FCL)技术的设备,它能够实时监控线路电流,并在检测到异常电流状况时触发告警,以保护电网免受过电流损害...

Global site tag (gtag.js) - Google Analytics