《C#多线程编程实战(原书第2版)》——3.7 使用计时器

简介:

本节书摘来自华章出版社《C#多线程编程实战(原书第2版)》一书中的第3章,第3.7节,作者(美)易格恩·阿格佛温(Eugene Agafonov),黄博文 黄辉兰 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.7 使用计时器

本节将描述如何使用System.Threading.Timer对象来在线程池中创建周期性调用的异步操作。

3.7.1 准备工作

为了学习本节,你需要安装Visual Studio 2015。除此之外无需其他准备。本节的源代码放置在BookSamplesChapter3Recipe6目录中。

3.7.2 实现方式

请执行以下步骤来了解如何在线程池中创建周期性调用的异步操作:

1.启动Visual Studio 2015。新建一个C#控制台应用程序项目。

2.在Program.cs文件中加入以下using指令:


0b900fdf1f83e0aae33e3133bda3bc90d35cf4d5

3.在Main方法下面加入以下代码片段:


0c70fa4dca19d293db1c9c0f0f9fbf83b81febc6

4.在Main方法中加入以下代码片段:


a2fe7fe8603da98e8c9f4f26b6d10ea8c213f3bd

5.运行程序。

3.7.3 工作原理

我们首先创建了一个Timer实例。第一个参数是一个lambda表达式,将会在线程池中被执行。我们调用TimerOperation方法并给其提供一个起始时间。由于无须使用用户状态对象,所以第二个参数为null。然后指定了什么时候会第一次运行TimerOperation,以及之后再次调用的间隔时间。所以第一个值实际上说明一秒后会启动第一次操作,然后每隔两秒再次运行。

之后等待6秒后修改计时器。在调用_timer.Change方法一秒后启动TimerOperation,然后每隔4秒再次运行。

计时器还可以更复杂!

可以以更复杂的方式使用计时器。比如,可以通过Timeout.Infinite值提供给计时器一个间隔参数来只允许计时器操作一次。然后在计时器异步操作内,能够设置下一次计时器操作将被执行的时间。具体时间取决于自定义业务逻辑。

最后等待回车键被按下以结束整个应用程序。在程序运行过程中可以看到自从程序启动后经历的时间。

相关文章
多线程(初阶八:计时器Timer)
多线程(初阶八:计时器Timer)
176 0
|
存储 安全 Java
线程池和计时器
线程池是一种线程使用模式,维护多个线程以分配并执行任务,避免频繁创建与销毁线程带来的开销。核心原理包括:创建空线程池、按需创建线程执行任务并归还线程池、以及任务排队等待。Java 标准库中的 `ThreadPoolExecutor` 实现了线程池功能,其构造方法涉及核心线程数、最大线程数、非核心线程空闲时间等参数。当任务超出处理能力时,线程池会采用不同的拒绝策略。此外,定时器通过 `Timer` 和 `TimerTask` 类实现定时执行任务的功能。自定义线程池和定时器可通过优先级队列和线程安全机制实现高效的任务调度。
118 5
C# 版本的 计时器类 精确到微秒 秒后保留一位小数 支持年月日时分秒带单位的输出
这篇2010年的文章是从别处搬运过来的,主要包含一个C#类`TimeCount`,该类有多个方法用于处理时间相关的计算。例如,`GetMaxYearCount`计算以毫秒为单位的最大年数,`GetCurrentTimeByMiliSec`将当前时间转换为毫秒,还有`SecondsToYYMMDDhhmmss`将秒数转换为年月日时分秒的字符串。此外,类中还包括一些辅助方法,如处理小数点后保留一位数字的`RemainOneFigureAfterDot`。
|
C# Windows Java
C#中各种计时器 Stopwatch、TimeSpan
1、使用 Stopwatch 类 (System.Diagnostics.Stopwatch)Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间。
2396 0
|
API C# Windows
C# Win32控制台线程计时器代码示例
在C#中提供了三种类型的计时器:1、基于 Windows 的标准计时器(System.Windows.Forms.Timer)2、基于服务器的计时器(System.Timers.Timer)3、线程计时器(System.
875 0
|
2月前
|
安全 算法 Java
Java 多线程:线程安全与同步控制的深度解析
本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
117 0