读书笔记之多线程——System.Thread.Timer

--居然工作很久都没有用过System.Thread.Timer。下面是在MSDN上的一些学习笔记。

 

首选是构造函数 :

    Timer(TimerCallback)                            //使用新创建的 Timer 对象作为状态对象,用一个无限周期和一个无限到期时间初始化 Timer 类的新实例。
     Timer(TimerCallback, Object, Int32, Int32)      //使用 32 位的有符号整数指定时间间隔,初始化 Timer 类的新实例。
     Timer(TimerCallback, Object, Int64, Int64)      //用 64 位有符号整数来度量时间间隔,以初始化 Timer 类的新实例。
     Timer(TimerCallback, Object, TimeSpan, TimeSpan)//初始化 Timer 类的新实例,使用 TimeSpan 值来度量时间间隔。
     Timer(TimerCallback, Object, UInt32, UInt32)    //用 32 位无符号整数来度量时间间隔,以初始化 Timer 类的新实例。

 

备注:

使用 TimerCallback 委托指定希望 Timer 执行的方法。计时器委托在构造计时器时指定,并且不能更改。 此方法不在创建计时器的线程上执行,而是在系统提供的 ThreadPool线程上执行。

创建计时器时,可以指定在第一次执行方法之前等待的时间量(截止时间)以及此后的执行期间等待的时间量(时间周期)。 可以使用 Change 方法更改这些值或禁用计时器。

只要在使用 Timer,就必须保留对它的引用。对于任何托管对象,如果没有对 Timer 的引用,计时器会被垃圾回收。 即使 Timer 仍处在活动状态,也会被回收。

当不再需要计时器时,请使用 Dispose 方法释放计时器持有的资源。请注意,回调可能发生在 Dispose() 方法的重载被调用之后,因为计时器是按线程池线程来安排回调的执行的。 可使用 Dispose(WaitHandle) 方法重载进行等待,直到完成所有的回调。

由计时器执行的回调方法应该是可重入的,因为它是在 ThreadPool 线程上调用的。在以下两种情况中,此回调可以同时在两个线程池线程上执行:一是计时器间隔小于执行此回调所需的时间;二是所有线程池线程都在使用,此回调被多次排队。

System.Threading.Timer 是一个简单的轻量计时器,它使用回调方法并由线程池线程提供服务。不建议将其用于 Windows 窗体,因为其回调不在用户界面线程上进行。System.Windows.Forms.Timer 是用于 Windows 窗体的更佳选择。 要获取基于服务器的计时器功能,可以考虑使用 System.Timers.Timer,它可以引发事件并具有其他功能。

时间: 2024-07-28 12:42:24

读书笔记之多线程——System.Thread.Timer的相关文章

Java读书笔记(3)-多线程(一)

2016-1-1 ch16 多线程 线程概述 Java提供了非常优秀的多线程支持,创建,控制,同步,线程池 线程和进程 进程:独立性,动态性,并发性 线程:进程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程.线程可以拥有自己的堆栈,自己的程序计数器和自己的局部变量,但不拥有系统资源,它与父进程的其他线程共享该进程所拥有的全部资源.一个线程可以创建和撤销另一个线程,同一个进程中多个线程之间可以并发执行. 多线程的优势 较之多进程编程方便,并发性高,性能好 线程的创建和启动 继承Th

Java读书笔记(4)-多线程(二)

2016-1-2 线程通信 传统的线程通信 Object类提供了wait(),notify()和notifyAll三个方法 适用情况:synchronized修饰的同步方法或者synchronized方法 wait():导致当前线程等待,直到其他线程调用该同步监视器的notify()或notifyAll方法来唤醒该线程,调用wait方法后本线程会释放对同步监视器的锁定 notify():唤醒在此同步监视器上等待的单个线程.如果有多个线程在等待,则随机唤醒其中一个 notifyAll():唤醒在此

读书笔记:多线程服务器的适用场合(1)

声明:以下内容若无特别说明,均指Linux服务器环境下,传输层协议为TCP.主要开发语言为C++. 开发服务器端程序最基础的工作就是处理并发连接,服务器端网络编程处理并发连接主要有以下两种方式: 当线程廉价时,一台机器上可以创建远多于机器CPU物理线程数的"线程",这是一个线程只处理一个TCP连接,通常使用阻塞IO(至少看起来如此).例如Go goroutine.Erlang actor.这里的线程由语言runtime调用,与操作系统的线程不是一回事. 当线程很宝贵时,一台机器上只能创

《Java编程那点事儿》读书笔记(七)——多线程

1.继承Thread类 通过编写新的类继承Thread类可以实现多线程,其中线程的代码必须书写在run方法内部或者在run方法内部进行调用. public class NewThread extends Thread { private int ThreadNum; public NewThread(int ThreadNum){ this.ThreadNum = ThreadNum; } public void run(){ try{ for(int i = 0;i < 10;i ++){ T

Java 线程第三版 第一章Thread导论、 第二章Thread的创建与管理读书笔记

第一章 Thread导论 为何要用Thread ? 非阻塞I/O I/O多路技术 轮询(polling) 信号 警告(Alarm)和定时器(Timer) 独立的任务(Task) 并行算法 第二章 Thread的创建与管理 一.什么是Thread ? Thread是所在主机执行的应用程序任务(task). 只有一个线程的例子: public class Factorial { public static void main(String[] args) { int n = 5; System.ou

Java 线程第三版 第四章 Thread Notification 读书笔记

一.等待与通知 public final void wait() throws InterruptedException 等待条件的发生. public final void wait(long timeout) throws InterruptedException 等待条件的发生.如果通知没有在timeout指定的时间内发生,它还是会返回. public final void wait(long timeout, int nanos) throws InterruptedException

《Linux多线程编程手册》读书笔记

第二章 基本线程编程 1.(P25)如果多个线程等待同一个线程终止,则所有等待线程将一直等到目标线程终止.然后,一个等待线程成功返回,其余的等待线程将失败并返回ESRCH错误. 2.(P26)将新线程的pbe参数作为栈参数进行传递.这个线程参数之所以能够作为栈参数传递,是因为主线程会等待辅助线程终止.不过,首选方法是使用malloc从堆分配存储,而不是传递指向线程栈存储的地址.如果将该参数作为地址传递到线程栈存储,则该地址可能无效或者在线程终止时会被重新分配. 3.(P28)pthread_de

Java 线程第三版 第八章 Thread与Collection Class 读书笔记

JDK1.2引入最有争议性的改变是将集合类默认为不是Thread安全性的. 一.Collection Class的概述 1. 具有Threadsafe 的Collection Class: java.util.Vector(List) 列表集合,通过索引操作. java.util.Stack(List) 继承自Vector,提供LIFO的顺序操作push进入,pop出元素. java.util.Hashtable(Map) 一个简单.无序的key与value的映射. java.util.conc

Java 线程第三版 第九章 Thread调度 读书笔记

一.Thread调度的概述 import java.util.*; import java.text.*; public class Task implements Runnable { long n; String id; private long fib(long n) { if (n == 0) return 0L; if (n == 1) return 1L; return fib(n - 1) + fib(n - 2); } public Task(long n, String id)