как использовать функцию локального времени с VIsual Studio C ++ 2008 - PullRequest
1 голос
/ 22 марта 2010

Я получаю эту ошибку: «Необработанное исключение в 0x00411690 в tim.exe: 0xC0000005: Место чтения нарушения доступа 0x00000008», когда я выполняю программу, она компилируется и связывается успешно, и проблема заключается в том, что функция localtime () не правильнопризнан Visual C ++ 2008. (С VC ++ 6 эта программа отлично работает).

...
int gettimeofday(struct timeval *tv, struct timezone *tz)
{
  FILETIME ft;
  unsigned __int64 tmpres = 0;
  static int tzflag = 0;

  if (NULL != tv)
  {
    GetSystemTimeAsFileTime(&ft);

    tmpres |= ft.dwHighDateTime;
    tmpres <<= 32;
    tmpres |= ft.dwLowDateTime;

    tmpres /= 10;  /*convert into microseconds*/
    /*converting file time to unix epoch*/
    tmpres -= DELTA_EPOCH_IN_MICROSECS; 
    tv->tv_sec = (long)(tmpres / 1000000UL);
    tv->tv_usec = (long)(tmpres % 1000000UL);
  }

  if (NULL != tz)
  {
    if (!tzflag)
    {
      _tzset();
      tzflag++;
    }
    tz->tz_minuteswest = _timezone / 60;
    tz->tz_dsttime = _daylight;
  }

  return 0;
}
uint32_t stampstart() 
{ 
 struct timeval  tv; 
 struct timezone tz; 
 struct tm      *tm; 
 uint32_t         start; 

 gettimeofday(&tv, &tz); 
 tm = localtime(&tv.tv_sec);  /////--- problem is here --- 

 printf("TIMESTAMP-START\t  %d:%02d:%02d:%d (~%d ms)\n", tm->tm_hour, 
        tm->tm_min, tm->tm_sec, tv.tv_usec, 
        tm->tm_hour * 3600 * 1000 + tm->tm_min * 60 * 1000 + 
        tm->tm_sec * 1000 + tv.tv_usec / 1000);  

 start = tm->tm_hour * 3600 * 1000 + tm->tm_min * 60 * 1000 + 
  tm->tm_sec * 1000 + tv.tv_usec / 1000; 

 return (start); 

} 

Есть ли идеи и спасибо за ответы:

1 Ответ

1 голос
/ 22 марта 2010

Документация гласит:

Вернуть указатель на структуру результат. Если значение в таймере представляет дату до полуночи, 1 января 1970 г., возврат NULL.

Итак, убедитесь, что значение времени, которое вы отправляете, является правильным. Это кажется немного страшным.

...