2013-04-07 79 views
6

2013年夏令时(美国)于3月10日星期日凌晨2:00开始。因此,现在是2013年3月9日,我在已创建的等待定时器手柄上调用以下API:当CreateWaitableTimer设置为不存在的日期/时间时会发生什么?

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点。

所以我的问题,我的计时器会发生什么? (我似乎无法找到这种情况的文档。)

+0

为什么不通过简单地转发您的内部时钟几分钟来创建这种情况? – 2013-04-07 09:21:48

+0

+1。但是人们往往不会预见到这一点) – SChepurin 2013-04-07 09:29:35

+0

是的,我现在在玩它,但是我在操作系统和Visual Studio中遇到了“奇怪的影响”。我想找到一些这方面的官方文档... – c00000fd 2013-04-07 09:29:45

回答

7

我怀疑你已经知道的回答你的问题,因为您的评论明确指出:

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

所以你知道,对于SetWaitableTimer()该文件说:

请务必使用基于UTC的绝对时间,因为系统内部使用基于UTC的 时间。

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

+0

嗯。好点子。是的,我错过了UTC部分。现在有道理。感谢您指出它... – c00000fd 2013-04-07 09:31:30

+0

考虑到所有这一次我们继承相关的混乱,这仍然是一个非常好的问题要问。 – SChepurin 2013-04-07 09:42:06

3

SetWaitableTimer预计pDueTime以UTC给出;所以没有办法用这种不存在的日期/时间来称呼它。

相关问题