C++/POSIX comment obtenir une milliseconde horodatage de la manière la plus efficace?

Je suis en utilisant une bibliothèque libre pour bus i2c actions. Cette bibliothèque utilise fréquemment une fonction pour obtenir une réelle horodatage avec milliseconde.

Exemple D'Appel:

nowtime = timer_nowtime();
while ((i2c_CheckBit(dev) == true) && ((timer_nowtime() - nowtime) < I2C_TIMEOUT));

L'application à l'aide de cette i2c bibliothèque utilise beaucoup de la capacité du PROCESSEUR. J'ai compris, que le programme en cours d'exécution le plus de temps est l'appel de la fonction timer_nowtime().

La fonction d'origine:

unsigned long timer_nowtime(void) {        
    static bool usetimer = false;
    static unsigned long long inittime;
    struct tms cputime;

    if (usetimer == false)
    {
        inittime  = (unsigned long long)times(&cputime);
        usetimer = true;
    }

    return (unsigned long)((times(&cputime) - inittime)*1000UL/sysconf(_SC_CLK_TCK));
}

Mon but aujourd'hui est, à améliorer l'efficacité de cette fonction. J'ai essayé de cette façon:

struct timespec systemtime;

clock_gettime(CLOCK_REALTIME, &systemtime);
//convert the to milliseconds timestamp
//incorrect way, because (1 /1000000UL) always returns 0 -> thanks Pace
//return (unsigned long) ( (systemtime.tv_sec * 1000UL) + (systemtime.tv_nsec
//             * (1 /1000000UL)));
return (unsigned long) ((systemtime.tv_sec * 1000UL)
            + (systemtime.tv_nsec / 1000000UL));

Malheureusement, je ne peux pas déclarer cette fonction inline (aucune idée pourquoi).

Qui est plus efficace d'obtenir un timestamp réelle avec ms résolution?
Je suis sûr qu'il est plus per-formants façon de le faire. Toutes les suggestions?

grâce.

N'est pas (1 / 1000000UL) retourne toujours 0?
Rythme, vous êtes de droite. ( 1 / 1000000UL)= 0; je vais corriger mon code.

OriginalL'auteur Maus | 2010-01-04