Почему gettimeofday возвращает странный tv_sec?
У меня есть приложение, которое вызывает gettimeofday
хранить tv_sec, в котором эта часть кода начинает выполняться. Этот код очень прост:
struct timeval tvnow;
gettimeofday(&tvnow);
int initialTime = tvnow.tv_sec;
Обычно это работает нормально, но иногда я получаю неожиданные результаты, такие как
tvnow = {tv_sec = 1024, tv_usec = 0}
initialTime = 1401591
Или же
tvnow = {tv_sec = 1024, tv_usec = 0}
initialTime = 2439903
Почему это могло случиться?
С уважением
1 ответ
Ты звонишь gettimeofday()
с неправильным количеством аргументов. Результирующее поведение не определено. Если вам не нужна информация о часовом поясе, тогда передайте NULL
в качестве второго аргумента:
struct timeval tvnow;
gettimeofday(&tvnow, NULL);
int initialTime = tvnow.tv_sec;
Я собираюсь предположить, что каким-то образом вы включаете комбинацию заголовков, которые включают определение struct timeval
(или вы предоставляете свое собственное определение), но не прототип для gettimeofday()
, Если в точке вызова функции был виден правильный прототип, то код вообще не должен компилироваться. Если ваш компилятор не выдает предупреждение об отсутствии прототипа, вам следует либо выяснить, как заставить его это сделать (и всегда так компилировать), либо получить лучший компилятор.