Mam jednej linii kodu w moim kodu serwera aplikacji, która pobiera mi wartość datownika korzystając steady_clock
jak pokazano poniżej:chrono steady_clock nie daje prawidłowego wyniku?
uint64_t now = duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
Teraz mamy dwa systemy machineA który jest uruchomiony Ubuntu 12 (gcc 4.6.3 compiler)
i machineB który jest uruchomiony Ubuntu 14 (gcc 4.8.2 compiler)
.
Teraz możemy skompilować kod serwera aplikacji za pomocą make na innymUbuntu 12 VM (which has 4.7.3 compiler)
, a następnie skopiuj plik tar, który zostanie wygenerowany na komputerze A i uruchom nasz serwer aplikacji. Po starcie, powyższy wiersz kodu wypisuje wartość takiego w machineA:
1439944652967
Teraz możemy również przygotować nasz kod serwera samej aplikacji za pomocą uczynić na innyUbuntu 14 VM (which has 4.8.2 compiler)
i skopiuj plik tar, który pobiera wygenerowaną do machineB i uruchom nasz serwer aplikacji. Po starcie powyższy wiersz kodu wypisuje wartość podobną do tej w maszynie B:
10011360
Widzisz różnicę w prawo? Jestem zdezorientowany, dlaczego to jest różnica, nie jestem w stanie tego zrozumieć? Cały kod i wszystko jest takie samo. Czy ktoś ma jakieś wyjaśnienia na ten temat i jak mogę to naprawić?
W razie potrzeby mogę spróbować dodać kod debugowania, aby zobaczyć, co jest nie tak, aby zrozumieć ten problem.
W bardziej ogólnych terminach: "czas" mówi, która jest godzina, "zegary" po prostu idź. –
Dobra odpowiedź, ale czas letni nie wpłynie na "system_clock". Parametr 'system_clock' zwykle śledzi czas Unix, który jest liczbą sekund nieskrępowanych od 1970-01-01 w strefie czasowej UTC. –
@HowardHinnant Nie można zagwarantować czasu unixowego UTC, i jestem prawie pewien, że może on postrzegać DST.Zgodnie z normą: "Obiekty klasy system_clock reprezentują czas zegara ściennego z całego systemu w czasie rzeczywistym zegara." (bezwstydnie podniósł z [tutaj] (http://stackoverflow.com/questions/13263277/difference-between-stdsystem-clock-and-stdsteady-clock), ponieważ nie mam dostępu do standardu w tej chwili). "Czas zegara ściennego" na pewno zmienia się w zależności od czasu letniego. – Corbin