Что происходит, когда CreateWaitableTimer установлен для несуществующей даты / времени?
Переход на летнее время (США) в 2013 году начался в 2:00 утра в воскресенье, 10 марта. Итак, скажем, сейчас 9 марта 2013 года, и я вызываю следующий 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:00 будет 3:00.
Итак, мой вопрос, что будет с моим таймером? (Я не могу найти документацию по этому делу.)
2 ответа
Я подозреваю, что вы уже знаете ответ на свой вопрос, потому что в вашем комментарии прямо говорится:
// Points _as absolute time_ to March 10th, 2013, at 2:10 AM
Итак, вы знаете, что документация для SetWaitableTimer() гласит:
Обязательно используйте абсолютное время в формате UTC, поскольку система использует внутреннее время в формате UTC.
Так как UTC не заботится о летнем времени, ваш таймер сработает March 10th, 2013, 3:10 AM
, ваше местное время.
SetWaitableTimer
ожидает pDueTime
быть предоставленным в UTC; так что нет способа назвать это с такой несуществующей датой / временем.