2013-04-07 9 views
6

Czas letni (Stany Zjednoczone) w 2013 r. Rozpoczął się o godzinie 14:00 w niedzielę, 10 marca 2013 r. Tak więc, powiedzmy, jest 9 marca 2013 r. I nazywam następujące API na już utworzonym sterowniku dającym się czekać:Co się dzieje, gdy CreateWaitableTimer jest ustawiony na nieistniejącą datę/godzinę?

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 to czas nieistniejący, ponieważ czas zostanie skorygowany o godzinę wcześniej, więc zamiast 2 nad ranem będzie to 3 nad ranem.

Moje pytanie, co stanie się z moim timerem? (Nie mogę znaleźć dokumentacji dla tej sprawy).

+0

Dlaczego nie można stworzyć takiej sytuacji, po prostu przesyłając wewnętrzny zegar przez kilka minut? –

+0

+1. Ale ludzie nie mają tendencji do przewidywania z wyprzedzeniem) – SChepurin

+0

Tak, gram teraz, ale dostaję "dziwne efekty" w OS i Visual Studio. Pomyślałem, aby znaleźć oficjalną dokumentację dla tego ... – c00000fd

Odpowiedz

7

Podejrzewam, że już znasz odpowiedź na swoje pytanie, ponieważ Twój komentarz wyraźnie stwierdza:

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

Więc jesteś świadomy, że dokumentacja dla SetWaitableTimer() mówi:

Należy używać czas bezwzględny oparty na UTC, ponieważ system korzysta wewnętrznie z czasu w standardzie UTC.

Od UTC nie dba o DST cokolwiek, twój zegar zostanie uruchomiony na March 10th, 2013, 3:10 AM, czasu lokalnego.

+0

Hmm. Słuszna uwaga. Tak, tęskniłem za tą częścią UTC. Ma to sens teraz. Dzięki za wskazanie ... – c00000fd

+0

Biorąc pod uwagę cały czas związany z tym bałagan, który dziedziczymy, wciąż jest to bardzo dobre pytanie. – SChepurin

3

SetWaitableTimer oczekuje, że pDueTime zostanie podany w UTC; więc nie ma sposobu, aby zadzwonić z tak nieistniejącą datą/czasem.

Powiązane problemy