当为不存在的日期/时间设置CreateWaitableTimer时会发生什么?

What happens when CreateWaitableTimer is set for non-existing date/time?

本文关键字:什么 CreateWaitableTimer 设置 不存在 日期 时间      更新时间:2023-10-16

2013年美国夏令时于3月10日(星期日)凌晨2点开始。例如,现在是2013年3月9日,我在已经创建的可等待计时器句柄上调用以下API:

FILETIME ftWhen = //Points as absolute time to March 10th, 2013, at 2:10 AM
SetWaitableTimer(hTimer, ftWhen, 0, NULL, NULL, TRUE);

March 10th, 2013, 2:10 AM是一个不存在的时间,因为时间将提前一小时调整,所以时间将从凌晨2点调整为凌晨3点。

我的问题是,计时器会发生什么?(我似乎找不到这种情况的文档)

我怀疑你已经知道问题的答案了,因为你的评论明确地说:

// Points _as absolute time_ to March 10th, 2013, at 2:10 AM

你知道SetWaitableTimer()的文档说:

请确保使用基于utc的绝对时间,因为系统使用基于utc的绝对时间内部时间。

由于UTC不关心DST,您的计时器将在March 10th, 2013, 3:10 AM上触发,您的本地时间

SetWaitableTimer期望pDueTime用UTC给出;所以没有办法用这样一个不存在的日期/时间来调用它。