Boujour,
J'écrit une application qui requiert l'instruction clock() (ou une autre fonction capable de me fournir un horodatage avec une précision de l'ordre d'une dizaine/vingtaine de millisecondes).
Le code de mon application est portable mais j'ai un problème sous linux :
Sous Windows XP, clock() me renvoie un horodatage en millisecondes,
Sous Linux, clock() renvoie toujours 0 (j'ai testé sur une debian etch, fedora je sais plus combien mais récente, ubuntu feisty, et aussi une gentoo dont je ne connait pas le contenu du noyau).
Voici le code (bateau) que je teste sur chaque distrib qui me passe sous la main :
J'obtiens donc le résultat suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include <sys/types.h> #include <time.h> #include <unistd.h> #include <stdio.h> int main(int argc, char ** argv) { unsigned long av = clock(), ap; printf("Avant : %d\n",av); usleep(500000); ap = clock(); printf("Apres : %d\n",ap); printf("Durée : %d\n",ap - av); return 0; }
Je précise que le usleep(500000) attend bien environ 500ms. C'est très perceptible lors de l'exécution du programme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Avant : 0 Apres : 0 Durée : 0
Si quelqu'un voit une erreur ou connait une alternative au problème, et bien ça m'interesse
PS : Je ne veux pas utiliser l'instruction rdtsc des x86 car sur les ordinateurs portables, je ne peux pas définir un nombre de front montants d'horloge pour une durée en raison de la fréquence ajustable de leurs processeurs.
Partager