fbpx
维基百科

可等待定时器

可等待定时器对象Windows操作系统的一种同步对象,当设定的期限到了时,对象被置为signaled状态。[1]

可创建两种可等待定时器对象:

  • 手工重置(manual-reset):保持signaled状态直至调用SetWaitableTimer函数设置了新的期限。
  • 同步(synchronization):保持signaled状态直至一个线程在该对象上完成了等待操作。

两种可等待定时器对象都可以是周期定时器(periodic timer)。周期定时器在每次周期到期时可重新激活,直至它被重置或者被取消。周期定时器或者是手工重置定时器或者是同步定时器。

当定时器变为signaled状态, 处理器须执行相关的指令(如completion routine)。高频率的定时器使得处理器处于繁忙状态,阻止其进入低能耗状态。考虑在程序中使用事件通知而不是定时器通知。如果必须使用定时器,考虑使用一次性定时器而不是周期定时器。或者设置周期定时器的间隔大于1秒钟。

线程使用CreateWaitableTimer或CreateWaitableTimerEx函数创建定时器对象,并指明是手工重置定时器还是同步定时器,还可指定定时器的名字. 其他进程中的线程可以指出定时器的名字,用OpenWaitableTimer函数打开一个已经存在的定时器。任何线程可以给出一个定时器的句柄,用等待函数(wait function)在该定时器对象上等待其状态变为signaled.

线程调用SetWaitableTimer函数来激活定时器,使用CancelWaitableTimer函数设置定时器为无效(inactive)状态。使用完定时器后,调用CloseHandle函数关闭它.

Windows操作系统对定时器对象的处理过程为:

  • 当一个定时器被启动(set),定时器对象的状态为nonsignaled, 并被放在内核定时器队列中。
  • 当一个定时器到期,定时器对象置为signaled状态。如果定时器有(绑定的)完成过程(completion routine), 该完成过程被放入启动该定时期的线程的异步过程调用(APC)队列,直至该线程进入可唤醒等待状态(alertable wait state)时操作系统按照异步过程调用方式执行该过程. 如果为周期定时器,它再次被放入内核定时器队列。
  • 当一个定时器被取消,如果它处于等待期间,会从内核定时器队列中删除。如果定时器已经到期了并且在启动该定时期的线程有一个APC处于排队中,在线程APC队列中删除这个未执行的APC。 定时器的信号态(signaled state)不受影响。

参考文献 编辑

  1. ^ MSDN:Waitable Timer Objects. [2016-09-05]. (原始内容于2016-11-30). 

可等待定时器, 对象是windows操作系统的一种同步对象, 当设定的期限到了时, 对象被置为signaled状态, 可创建两种对象, 手工重置, manual, reset, 保持signaled状态直至调用setwaitabletimer函数设置了新的期限, 同步, synchronization, 保持signaled状态直至一个线程在该对象上完成了等待操作, 两种对象都可以是周期定时器, periodic, timer, 周期定时器在每次周期到期时可重新激活, 直至它被重置或者被取消, 周期定时器或者是手工. 可等待定时器对象是Windows操作系统的一种同步对象 当设定的期限到了时 对象被置为signaled状态 1 可创建两种可等待定时器对象 手工重置 manual reset 保持signaled状态直至调用SetWaitableTimer函数设置了新的期限 同步 synchronization 保持signaled状态直至一个线程在该对象上完成了等待操作 两种可等待定时器对象都可以是周期定时器 periodic timer 周期定时器在每次周期到期时可重新激活 直至它被重置或者被取消 周期定时器或者是手工重置定时器或者是同步定时器 当定时器变为signaled状态 处理器须执行相关的指令 如completion routine 高频率的定时器使得处理器处于繁忙状态 阻止其进入低能耗状态 考虑在程序中使用事件通知而不是定时器通知 如果必须使用定时器 考虑使用一次性定时器而不是周期定时器 或者设置周期定时器的间隔大于1秒钟 线程使用CreateWaitableTimer或CreateWaitableTimerEx函数创建定时器对象 并指明是手工重置定时器还是同步定时器 还可指定定时器的名字 其他进程中的线程可以指出定时器的名字 用OpenWaitableTimer函数打开一个已经存在的定时器 任何线程可以给出一个定时器的句柄 用等待函数 wait function 在该定时器对象上等待其状态变为signaled 线程调用SetWaitableTimer函数来激活定时器 使用CancelWaitableTimer函数设置定时器为无效 inactive 状态 使用完定时器后 调用CloseHandle函数关闭它 Windows操作系统对定时器对象的处理过程为 当一个定时器被启动 set 定时器对象的状态为nonsignaled 并被放在内核定时器队列中 当一个定时器到期 定时器对象置为signaled状态 如果定时器有 绑定的 完成过程 completion routine 该完成过程被放入启动该定时期的线程的异步过程调用 APC 队列 直至该线程进入可唤醒等待状态 alertable wait state 时操作系统按照异步过程调用方式执行该过程 如果为周期定时器 它再次被放入内核定时器队列 当一个定时器被取消 如果它处于等待期间 会从内核定时器队列中删除 如果定时器已经到期了并且在启动该定时期的线程有一个APC处于排队中 在线程APC队列中删除这个未执行的APC 定时器的信号态 signaled state 不受影响 参考文献 编辑 MSDN Waitable Timer Objects 2016 09 05 原始内容存档于2016 11 30 取自 https zh wikipedia org w index php title 可等待定时器 amp oldid 67231270, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。