Προς το περιεχόμενο

Χρόνος μέσα σε πρόγραμμα C


pagratios

Προτεινόμενες αναρτήσεις

Πως μπορώ να πάρω χρόνο μέσα σε ένα πρόγραμμα C που το τρέχω στα windows. Σε linux χρησιμοποιώ τα εξής

 

>
#include <sys/time.h>

main()
{
 struct timeval start, end;
 gettimeofday(&start,NULL);

 ...

 gettimeofday(&end,NULL);
   
   
   printf("End of Serial at %lf sec\n\n",(double) (end).tv_sec + (double)(end).tv_usec  / 1000000 - ((double) (start).tv_sec + (double)(start).tv_usec / 1000000));

}

 

Το παραπάων είναι αρκετά ακριβές

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν είναι δικός μου ο κώδικας έτυχε να τον βρώ στο διαδίκτυο:

 

>
#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 */
};

/* Definition of a gettimeofday function */
int gettimeofday(struct timeval *tv, struct timezone *tz)
{
   /* Define a structure to receive the current Windows filetime */
   FILETIME ft;
   /* Initialize the present time to 0 and the timezone to UTC */
   unsigned __int64 tmpres = 0;
   static int tzflag = 0;

   if (NULL != tv)
   {
       GetSystemTimeAsFileTime(&ft);
       /* The GetSystemTimeAsFileTime returns the number of 100 nanosecond 
         intervals since Jan 1, 1601 in a structure. Copy the high bits to 
         the 64 bit tmpres, shift it left by 32 then or in the low 32 bits. */
       tmpres |= ft.dwHighDateTime;
       tmpres <<= 32;
       tmpres |= ft.dwLowDateTime;
       /* Convert to microseconds by dividing by 10 */
       tmpres /= 10;
       /*  The Unix epoch starts on Jan 1 1970.  Need to subtract the difference 
           in seconds from Jan 1 1601. */
       tmpres -= DELTA_EPOCH_IN_MICROSECS;
       /* Finally change microseconds to seconds and place in the seconds value. 
          the modulus picks up the microseconds. */
       tv->tv_sec = (long)(tmpres / 1000000UL);
       tv->tv_usec = (long)(tmpres % 1000000UL);
   }

   if (NULL != tz)
   {
       if (!tzflag)
       {
           _tzset();
           tzflag++;
       }
       /* Adjust for the timezone west of Greenwich */
       tz->tz_minuteswest = _timezone / 60;
       tz->tz_dsttime = _daylight;
   }
   return 0;
}

 

Αν θέλεις να χρησιμοποιήσεις Windows API, η GetTickCount κάνει για αυτό που ζητάς.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...