win 32 et utilisation de time.h

win 32 et utilisation de time.h - C - Programmation

Marsh Posté le 12-05-2005 à 18:53:19    

Bonjour,
 
J'utilise un code en C qui contient des fonctions de la librairie time.h. Tout marche bien lorsque j'utilise ce code sous Windows (Visual C++). Ce code est ecrit de facon a pouvoir etre aussi utilise sous Unix/Linux. J'ai donc essaye de compiler le code sous Cygwin (avec gcc) et tout marche bien, sauf que les mesures de temps de calcul effectuees avec les fonctions de time.h me renvoient parfois des valeurs negatives!
Les lignes de code correspondantes a l'appel des fonctions en cause sont du style suivant:

Code :
  1. #ifdef WIN32
  2.       _ftime(&tstruct2);   // end time ms
  3. #else
  4.       ftime(&tstruct2);    // end time ms
  5. #endif


 
Je ne suis pas vraiment sur du comportement du #ifdef WIN32. J'ai cherche dans le programme et il n'y a aucune declaration du genre #define WIN32. Est ce que c'est un parametre que le compilateur verifie automatiquement? (i.e. si compilation sous windows WIN32 est definie et sinon non)
Si le compilateur verifie ca tout seul est ce que quelqu'un connait le comportement de gcc lorsqu'il compile un soft sous Cygwin. J'ai essaye de voire dans le man de gcc s'il y avait des option a rajouter dans ma ligne de compilation mais j'ai rien vu d'interessant a ce niveau la.
 
Si quelqu'un a une idee pour expliquer mes mesures de temps negatives...

Reply

Marsh Posté le 12-05-2005 à 18:53:19   

Reply

Marsh Posté le 12-05-2005 à 20:23:46    

niemad a écrit :

J'utilise un code en C qui contient des fonctions de la librairie time.h.


Attention, ftime() n'est pas une fonction standard, et je doute que tu en ais vraiment besoin...

Citation :


Code :
  1. #ifdef WIN32
  2.       _ftime(&tstruct2);   // end time ms
  3. #else
  4.       ftime(&tstruct2);    // end time ms
  5. #endif


 
Je ne suis pas vraiment sur du comportement du #ifdef WIN32. J'ai cherche dans le programme et il n'y a aucune declaration du genre #define WIN32. Est ce que c'est un parametre que le compilateur verifie automatiquement? (i.e. si compilation sous windows WIN32 est definie et sinon non)


C'est correct, mais améliorable :  
 
Au début du code, ou mieux, dans un header de portage (portage.h) :  


#ifdef WIN32
#define ftime(p) _ftime(p)
#endif


 
L'utilisation devient alors transparente :


      /* end time ms */
      ftime (&tstruct2);


Mais as-tu essayé ftime() sous Windows ? En effet, il est rare qu'on utilise directement des fonctions _xxx() dans du code d'application. Je ne serais pas surpris qu'il existe une macro ftime().

Citation :

Si quelqu'un a une idee pour expliquer mes mesures de temps negatives...


Montre le code exact, réduit, complet et compilable qui fait le défaut.


Message édité par Emmanuel Delahaye le 12-05-2005 à 20:29:43

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 13-05-2005 à 16:15:03    

Citation :

Montre le code exact, réduit, complet et compilable qui fait le défaut.


 
Le probleme c'est que l erreur ne se produit pas a chaque fois. J'ai une mesure de temps negatif environ 1% du temps seulement. Je vais essaye de reduire le code au minimum vital pour le mettre sur le forum car le programme en lui meme fait plusieur millier de lignes de code.
 
C est vrai que je n'avais pas pense a changer les lignes en mettant la declaration de ftime dans un header de portage. Ca peut effectivement rendre mon code un peu plus lisible.
 

Citation :

Mais as-tu essayé ftime() sous Windows ?


 
Je n'ai pas utilise ftime sous Windows car j'ai recupere le code tel quel et je n'ai pas modifie les parties contenant ftime() mais effectivement c'est un test que je devrais faire.
 
Merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed