C#多线程学习之(五)使用定时器进行多线程的自动管理
本文实例讲述了C#多线程学习之使用定时器进行多线程的自动管理。分享给大家供大家参考。具体分析如下:
Timer类:设置一个定时器,定时执行用户指定的函数。
定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数。
初始化一个Timer对象:
1
|
Timer timer = new Timer(timerDelegate, s,1000, 1000);
|
第一个参数:指定了TimerCallback 委托,表示要执行的方法;
第二个参数:一个包含回调方法要使用的信息的对象,或者为空引用;
第三个参数:延迟时间——计时开始的时刻距现在的时间,单位是毫秒,指定为“0”表示立即启动计时器;
第四个参数:定时器的时间间隔——计时开始以后,每隔这么长的一段时间,TimerCallback所代表的方法将被调用一次,单位也是毫秒。指定 Timeout.Infinite 可以禁用定期终止。
Timer.Change()方法:修改定时器的设置。(这是一个参数类型重载的方法)
使用示例:
1
|
timer.Change(1000,2000);
|
Timer类的程序示例(来源:MSDN):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
using System;
using System.Threading;
namespace ThreadExample
{
class TimerExampleState
{
public int counter = 0;
public Timer tmr;
}
class App
{
public static void Main()
{
TimerExampleState s = new TimerExampleState();
//创建代理对象TimerCallback,该代理将被定时调用
TimerCallback timerDelegate = new TimerCallback(CheckStatus);
//创建一个时间间隔为1s的定时器
Timer timer = new Timer(timerDelegate, s,1000, 1000);
s.tmr = timer;
//主线程停下来等待Timer对象的终止
while (s.tmr != null )
Thread.Sleep(0);
Console.WriteLine( "Timer example done." );
Console.ReadLine();
}
//下面是被定时调用的方法
static void CheckStatus(Object state)
{
TimerExampleState s =(TimerExampleState)state;
s.counter++;
Console.WriteLine( "{0} Checking Status {1}." ,DateTime.Now.TimeOfDay, s.counter);
if (s.counter == 5)
{
//使用Change方法改变了时间间隔
(s.tmr).Change(10000,2000);
Console.WriteLine( "changed" );
}
if (s.counter == 10)
{
Console.WriteLine( "disposing of timer" );
s.tmr.Dispose();
s.tmr = null ;
}
}
}
}
|
程序首先创建了一个定时器,它将在创建1秒之后开始每隔1秒调用一次CheckStatus()方法,当调用5次以后,在CheckStatus()方 法中修改了时间间隔为2秒,并且指定在10秒后重新开始。当计数达到10次,调用Timer.Dispose()方法删除了timer对象,主线程于是跳 出循环,终止程序。
转载于:https://www.cnblogs.com/zxtceq/p/5667327.html
C#多线程学习之(五)使用定时器进行多线程的自动管理相关推荐
- Java之多线程学习笔记五 —— 多线程模拟龟兔赛跑
Java之多线程学习笔记五 -- 多线程模拟龟兔赛跑 参考教程B站狂神https://www.bilibili.com/video/BV1V4411p7EF package pers.ylw.less ...
- Java多线程学习笔记20之定时器Timer
详细代码见:github代码地址 本节内容: 定时器Timer的使用及分析 1) 如何实现指定时间执行任务 2) 如何实现按指定周期执行任务 第五章 定时器Timer 定时/计划功能在移动开发领域使用 ...
- java 线程等待队列_Java多线程学习(五)——等待通知机制
等待通知机制的实现 方法wait()的作用是使当前线程进行等待,wait()方法是Object类的方法,该方法用来将当前线程放到"预执行队列",并在wait()所在的代码处停止执行 ...
- 队列和通知区别_Java多线程学习(五)——等待通知机制
等待通知机制的实现 方法wait()的作用是使当前线程进行等待,wait()方法是Object类的方法,该方法用来将当前线程放到"预执行队列",并在wait()所在的代码处停止执行 ...
- Java多线程学习十五:公平锁和非公平锁,为什么要“非公平”?
什么是公平和非公平 公平锁 指的是按照线程请求的顺序,来分配锁: 非公平锁 指的是不完全按照请求的顺序,在一定情况下,可以允许插队.但需要注意这里的非公平并不是指完全的随机,不是说线程可以任意插队,而 ...
- ABP学习实践(五)--引入Swagger对API接口进行管理
以目前流行的前后端分离模式来看,ABP框架更适用于后端开发,而对API接口的管理就成了一项必不可少的功能. 1.安装Swashbuckle.AspNetCore 使用Nuget管理器在分布式服务层和展 ...
- 艾伟:C#多线程学习(六) 互斥对象
本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操纵一个线程 C#多线程学习(三) 生产者和消费者 C#多线程学习(四) 多线程的自动管理(线程池) C#多线程学习( ...
- C#多线程学习(二) 如何操纵一个线程
C#多线程学习(二) 如何操纵一个线程 原文链接:http://kb.cnblogs.com/page/42529/ [1] C#多线程学习(二) 如何操纵一个线程 [2] C#多线程学习(二) 如何 ...
- C#多线程学习(三) 生产者和消费者
C#多线程学习(三) 生产者和消费者 原文链接:http://kb.cnblogs.com/page/42530/ 本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操 ...
最新文章
- 简单介绍MySQL开启事务的两种方式
- Android 获取keystore SHA1方法
- 从零开始学习docker(十九)Swarm mode 集群服务间通信--RoutingMesh
- C51_按键按下,流水灯亮起,数码管显示按下的次数
- 【转】我们今年二十三四岁。。。
- 非极大值抑制(NMS)
- 赛锐信息:SAP ABAP 常量和字面量
- 二级Access数据库大纲知识要点
- java 四舍五入保留小数
- 用傅里叶变换求单位原点的格林函数
- 汇编语言指令用法大全
- python_while 循环_珠穆朗玛峰
- MapReduce论文解读
- 数据网格(Data Mesh)是什么?
- 跟着Cell学作图 | 12.韦恩图(Vennerable包)
- vue中使用天地图测距、测面、标点【一】
- RESTful介绍(应用场合、常见的注解)
- 刚刚!安森美上海全球配送中心被迫关闭,将转移至新加坡和马尼拉
- 加密恶意流量检测思路分析
- 最新麦子学院Web前端项目实战 Web前端开发从入门到精通33G完整版
热门文章
- Android的服务(Service)(三)Service客户端的绑定与跨进程
- 浏览器获取文件MD5值
- 树莓派linux系统识别u盘启动,树莓派Raspberry Pi实战之命令行下实现USB存储设备自动挂载...
- JZOJ 5625. 【NOI2018模拟4.3】Max
- JZOJ 5448. 【NOIP2017提高A组冲刺11.3】机房比教室好多了
- myelicesp stepover不能点_市区6处垃圾临时转运点被撤销
- ps抠头发插件_「福利」PS抠图神级插件——VertusFluid Mask
- LOJ #2734 Luogu P3615 [JOI2016春季合宿]Toilets (结论、贪心)
- 涂格子游戏html,网页版方格贪吃蛇游戏html源码分享
- html 桌面截图,如何使用javascript在html中截取屏幕截图?