Quelqu'un pourrait-il vous aider à utiliser GetTimeOdday () Fonction avec Visual Studio C ++ 2008 sur Windows XP? Voici un code que j'ai trouvé quelque part sur le net:
#include < time.h > #include <windows.h> #if defined(_MSC_VER) || defined(_MSC_EXTENSIONS) #define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64 #else #define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL #endif struct timezone { int tz_minuteswest; /* minutes W of Greenwich */ int tz_dsttime; /* type of dst correction */ }; int gettimeofday(struct timeval *tv, struct timezone *tz) { FILETIME ft; unsigned __int64 tmpres = 0; static int tzflag; if (NULL != tv) { GetSystemTimeAsFileTime(&ft); tmpres |= ft.dwHighDateTime; tmpres <<= 32; tmpres |= ft.dwLowDateTime; /*converting file time to unix epoch*/ tmpres -= DELTA_EPOCH_IN_MICROSECS; tmpres /= 10; /*convert into microseconds*/ 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; } ... // call gettimeofday() gettimeofday(&tv, &tz); tm = localtime(&tv.tv_sec);
4 Réponses :
Il y a quelques types différents pour représenter un temps. Voici un certain code que j'ai utilisé récemment:
time_t now; time(&now); tm* local = localtime(&now);
Merci beaucoup pour votre réponse. Oui! Je pourrais utiliser la fonction Time () mais ce n'est pas aussi précis que GettimeOdday () et cela fait de moi un problème parce que je suis attaché à comparer les résultats que j'ai obtenus sur Unix avec ceux que je vais obtenir sous Windows. Merci encore!
in Unix L'utilisation de la structure TimeZone est obsolète. Je ne sais pas pourquoi tu l'utilises. Voir http://linux.about.com/od/commands/l/blcmdl2_gettime. HTM mais si vous souhaitez utiliser cette structure pour connaître la diffrence GMT (UTC) à partir de votre heure locale, il sera suivant: TZ_MINUtesWest est la diffrence réelle en quelques minutes à partir de GMT (UTC) et d'un drapeau indique si La lumière du jour est maintenant utilisée.
Votre exemple avec certaines modifications fonctionne bien dans Visual C ++ 2008 Express: P>
#include "stdafx.h" #include <time.h> #include <windows.h> const __int64 DELTA_EPOCH_IN_MICROSECS= 11644473600000000; /* IN UNIX the use of the timezone struct is obsolete; I don't know why you use it. See http://linux.about.com/od/commands/l/blcmdl2_gettime.htm But if you want to use this structure to know about GMT(UTC) diffrence from your local time it will be next: tz_minuteswest is the real diffrence in minutes from GMT(UTC) and a tz_dsttime is a flag indicates whether daylight is now in use */ struct timezone2 { __int32 tz_minuteswest; /* minutes W of Greenwich */ bool tz_dsttime; /* type of dst correction */ }; struct timeval2 { __int32 tv_sec; /* seconds */ __int32 tv_usec; /* microseconds */ }; int gettimeofday(struct timeval2 *tv/*in*/, struct timezone2 *tz/*in*/) { FILETIME ft; __int64 tmpres = 0; TIME_ZONE_INFORMATION tz_winapi; int rez=0; ZeroMemory(&ft,sizeof(ft)); ZeroMemory(&tz_winapi,sizeof(tz_winapi)); GetSystemTimeAsFileTime(&ft); tmpres = ft.dwHighDateTime; tmpres <<= 32; tmpres |= ft.dwLowDateTime; /*converting file time to unix epoch*/ tmpres /= 10; /*convert into microseconds*/ tmpres -= DELTA_EPOCH_IN_MICROSECS; tv->tv_sec = (__int32)(tmpres*0.000001); tv->tv_usec =(tmpres%1000000); //_tzset(),don't work properly, so we use GetTimeZoneInformation rez=GetTimeZoneInformation(&tz_winapi); tz->tz_dsttime=(rez==2)?true:false; tz->tz_minuteswest = tz_winapi.Bias + ((rez==2)?tz_winapi.DaylightBias:0); return 0; } int _tmain(int argc, _TCHAR* argv[]) { struct timeval2 tv; struct timezone2 tz; struct tm *tm1; time_t time1; ZeroMemory(&tv,sizeof(tv)); ZeroMemory(&tz,sizeof(tz)); gettimeofday(&tv, &tz); // call gettimeofday() time1=tv.tv_sec; tm1 = localtime(&time1); FILE *f; f=fopen("rez.txt","w"); fprintf(f,"%04d.%02d.%02d %02d:%02d:%02d\n",1900+tm1->tm_year,1+tm1->tm_mon,tm1->tm_mday,tm1->tm_hour,tm1->tm_min,tm1->tm_sec); fprintf(f,"Diffrence between GMT(UTC) and local time=%d %s\n",tz.tz_minuteswest,"minutes"); fprintf(f,"Is Daylight now=%s\n",tz.tz_dsttime?"Yes":"No"); fclose(f); return 0; }
Cela m'a aidé beaucoup, mais j'avais besoin d'un moment plus précis. J'ai utilisé getSystemTimePeceSeSfileTime code> à la place de
getSystemTimeasFileTime code>, et ça a fonctionné parfaitement. À votre santé.
Simple chronomètre en secondes strong> fwiw: C'est un tel que celui de Kate, mais je voulais juste la mentionner, si em> Strong> Quelqu'un cherche le chronomètre le plus simple en C ++ (comptage des secondes).
Pas une grosse affaire, je sais. Il n'a que la résolution de 1 seconde, donc si vous souhaitez cuiller des microsecs, continuez avec les autres exemples. P> double seconds=0;
time_t timer1, timer2;
time(&timer1); /* get current time */
...
time(&timer2); /* get current time later */
seconds = difftime(timer2,timer1);
Dans mon cas, cela fonctionnait comme suit: Depuis que je voulais trouver la durée de fonctionnement moyenne, j'ai utilisé: Inclure d'abord au début du programme, puis: Initialiser des échantillons = 100 (par exemple);
time_t t_start,t_end; time(&t_start); //get the current time //program that needs to be timed time(&t_end); //get the time at the end of execution of the program seconds = (difftime(t_start,t_end))/samples;//calculate the difference
Pouvez-vous poster l'exception que vous obtenez?
Veuillez expliquer l'erreur réelle que vous obtenez - "Erreur de manutention d'exception" n'est pas très spécifique.
merci pour vos réponses! J'ai déjà posté une question concernant cette erreur et il est sur: Stackoverflow.com/Questtions/2490449/... Merci encore pour vos réponses
S'il vous plaît ne postez pas la même question plusieurs fois. Dupliquer de Stackoverflow.com/Questtions/2490449/...
Désolé pour plusieurs messages. Comme j'ai besoin d'une aide pour résoudre ce problème, j'ai posté une question différente dans le délai d'essayer de le résoudre ... merci encore!
Remarque: Ce code manque des contrôles de nullité autour des arguments «TV» et «TZ» qui bloque probablement le programme de l'utilisateur au cas où ils envoient NULL dans l'un de ces arguments. Consultez la citation suivante de Man GettimeOdDay: "Si la téléviseur ou TZ est NULL, la structure correspondante n'est pas réglée ou retournée. L'utilisation de la structure de fuseau horaire est obsolète; l'argument TZ devrait normalement être spécifié comme null."