VC++ 6, pb avec time

VC++ 6, pb avec time - C++ - Programmation

Marsh Posté le 15-08-2003 à 15:59:43    

Soit le code suivant (VC++6, W98) :
 

Code :
  1. time (&start);
  2. /* Simulate calculations */
  3. FILE *f = fopen("D:\\difftime.txt","w+" );
  4. while (1) {
  5.  __try
  6.  {
  7.   //protect buffer with mutex
  8.   buf2Write->WriteBuffer();
  9.   buf2Read->ReadBuffer();
  10.   //copy buffer from to another buffer
  11.   CShared_buffer::CopyBuffer(((CSs_calc *)(buf2Read))->buffer, ((CSs_calc *)(buf2Write))->buffer);
  12.   for (unsigned long i = 0; i < (((CSs_calc *)(buf2Write))->buffer).bufSize; i++)
  13.    (((CSs_calc *)(buf2Write))->buffer).bufAddr[i] += 1;
  14.   time (&finish);
  15.   fprintf (f, "%lf\t%lf\n", difftime( finish, start ), finish);
  16.   fclose(f);
  17.   f = fopen("D:\\difftime.txt","a+" );
  18.    if (difftime( finish, start ) >= clock) {
  19.    logFile->WriteLogFile(buf2Write);
  20.    time(&start);
  21.   }
  22.  }


 
Je comprends pas pkoi la fonction en gras me renvoit tjs 0 :/
PS : j'ai le debug dans mon fichier "difftime.txt" :
la fonction renvoie tjs 0 SAUF ou rarement j'ai 1.000000
la variable finish vaut tjs 0.0000000
voici un extrait du contenu du fichier : :D


difftime()      finish
0.000000 0.000000
0.000000 0.000000
0.000000 0.000000
0.000000 0.000000
0.000000 0.000000
0.000000 0.000000
0.000000 0.000000
0.000000 0.000000
1.000000 0.000000
0.000000 0.000000
0.000000 0.000000
0.000000 0.000000
0.000000 0.000000
0.000000 0.000000


La variable clock est un double de valeur 0.200000
Dans la MSDN l'exemple est pareil, jsuis maudit ?  :??:  
une idee ?  :sweat:


Message édité par Giz le 15-08-2003 à 17:59:23
Reply

Marsh Posté le 15-08-2003 à 15:59:43   

Reply

Marsh Posté le 15-08-2003 à 16:04:02    

Oui, j'ai une idée.
 
J'avais eu le meme probleme que toi, et je l'avais résolu assez bizarrement.
 
Apres avoir chopé le start, copie la valeur de start dans une autre variable... et compare la valeur copiée avec celle de finish.
 
je ne sais pas pourquoi, mais il me semble que time renvoyait son résultat tjs a la meme adresse, ce qui faisait que les valeurs étaient écrasées.
 
Attention, je sors  peut etre ( surement ) une connerie, mais je suis quasi sur d'avoir eu un probleme similaire en essayant de timer l'execution de mon prog résal...
 
Affiche start et finish, tu verras, elles ont la meme valeur a coup sur, si tu les affiche apres time(&finish)


Message édité par Tetedeiench le 15-08-2003 à 16:04:40
Reply

Marsh Posté le 15-08-2003 à 16:06:37    

tetedeiench a écrit :

Oui, j'ai une idée.
 
J'avais eu le meme probleme que toi, et je l'avais résolu assez bizarrement.
 
Apres avoir chopé le start, copie la valeur de start dans une autre variable... et compare la valeur copiée avec celle de finish.
 
je ne sais pas pourquoi, mais il me semble que time renvoyait son résultat tjs a la meme adresse, ce qui faisait que les valeurs étaient écrasées.
 
Attention, je sors  peut etre ( surement ) une connerie, mais je suis quasi sur d'avoir eu un probleme similaire en essayant de timer l'execution de mon prog résal...
 
Affiche start et finish, tu verras, elles ont la meme valeur a coup sur, si tu les affiche apres time(&finish)


 
OK, je test  :jap: mais dans le debuggeur, la variable finish evolue bien pourtant c "strange" :/


Message édité par Giz le 15-08-2003 à 16:15:38
Reply

Marsh Posté le 15-08-2003 à 16:19:20    

Nop, en fait ca marche pas :D, mais qu'est ce que c que ce binz ?  :??:

Reply

Marsh Posté le 15-08-2003 à 16:29:54    

c zarb, dans le test, la fonction me renvoie -1, et ds le fichier difftime.txt c tjs pareil

Reply

Marsh Posté le 15-08-2003 à 16:33:28    

sujet a écrit :

Un probleme, encore un... ;)



 
Un titre foireux, encore un ;)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 15-08-2003 à 16:44:43    

antp a écrit :


 
Un titre foireux, encore un ;)


 
Ouai, ben jsais pas koi mettre, je pensais a "temps reel", t'a une meilleure idee ?? :D

Reply

Marsh Posté le 15-08-2003 à 16:50:46    

Voila un otre extrait du fichier difftime.txt en remplacant fprintf avec celui ci :
 

Code :
  1. fprintf (f, "%lf\t%lf\t%lf\n", start, finish, difftime( finish, start ));


 

start      finish       difftime(finish, start)
0.000442 0.000000 -0.000000
0.000442 0.000000 -0.000000
0.000442 0.000000 -0.000000
0.000442 0.000000 -0.000000
0.000442 0.000000 -0.000000
0.000442 0.000000 -0.000000
0.000442 0.000000 -0.000000
0.000442 1.000000 -0.000000
0.000442 0.000000 -0.000000
0.000442 0.000000 -0.000000


Message édité par Giz le 15-08-2003 à 16:52:12
Reply

Marsh Posté le 15-08-2003 à 17:16:05    

giz a écrit :


 
Ouai, ben jsais pas koi mettre, je pensais a "temps reel", t'a une meilleure idee ?? :D


 
je suggère "VC++ 6, pb avec time", c'est pourtant pas dur de faire un titre correct  :)


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 15-08-2003 à 17:56:38    

je déplace sur C ... sauf l'infame saloperie de __try, c'est du C
edit: et y aussi ces infâmes objets... les mecs faites un effort :pfff:  
 
si vous y tenez pas, je vous montre comment on fait de l'obejt avec  une synthaxe à peu près pareil de C++
 

Code :
  1. buf2Write->WriteBuffer(&buf2Write);

c'est faisable en C


Message édité par Taz le 15-08-2003 à 18:01:24
Reply

Marsh Posté le 15-08-2003 à 17:56:38   

Reply

Marsh Posté le 15-08-2003 à 18:17:54    

ben les types time_t sont entiers, donc de granularité 1.
 
edit: toutes ces erreurs auraient en partie pu être eviter avec la sécurité de typage des stream C++


Message édité par Taz le 15-08-2003 à 18:30:26
Reply

Marsh Posté le 15-08-2003 à 18:34:15    

Citation :

si vous y tenez pas, je vous montre comment on fait de l'obejt avec  une synthaxe à peu près pareil de C++


 
Je m'y suis intéressé un moment et j'ai quelques bons liens la dessus (heritage, fonctions virtuelles, ...). Mais ca mérite un post à lui tout seul.

Reply

Marsh Posté le 16-08-2003 à 11:49:07    

Avant de sortir un truc VC++ ou autre compilo a un pb avec time, faudrait lire la doc de time et difftime
 
Tes var semble etre de type float vu ton print, alors que time retourne des long (time_t)
C comme ton test, difftime retourne un double certe mais c un nombre de seconde niveau granularite, donc un 6.0f niveau printf, les chiffres apres la virgule c juste des erreurs d arrondi.
 
Donc d abord indique tes types, et apres regarde ou tu fais des conversions qui foute la grouille


Message édité par VisualC++ le 16-08-2003 à 11:52:57
Reply

Marsh Posté le 16-08-2003 à 11:51:06    

Citation :

difftime retourne des long

 
 

Citation :

difftime retourne un double certe

 
 
 :heink:  
 
sinon, moi comme d'hab, je poste du vent

Reply

Marsh Posté le 16-08-2003 à 11:52:42    

desole j ai pas tout lu :p
 
et je corrige c un double difftime :o (me manque un cafe pour etre reveille)

Reply

Marsh Posté le 16-08-2003 à 11:55:46    

VisualC++ a écrit :

desole j ai pas tout lu :p

même remarque qu'aux autres: faut arrêter d'être désolé et faut lire le sujet

Reply

Marsh Posté le 16-08-2003 à 12:00:32    

Bah des que ca derive je lis plus mais bon je vois pb avec time et ca arrive sur comment faire de l objet avec du C (bon ok son code est infame te l accorde), et la je switch et j ai switch ton second message ca arrive.
 
Ferais attention j essayerais :)
 
Donc sorry pour avoir dit ce que tu as dit juste au dessus.

Reply

Marsh Posté le 16-08-2003 à 13:01:00    

Et entre nous, n'en déplaiser a taz, tant que ca mmarche, on a pas tous besoin d'avoir un code aux petits oignons a la mode uniquement C ou C++ ...
 
En l'occurence le monsieur il veut que sont ime marche, et tes remarques sur la progrmmation objets, je crois qu'il n'en a que foutre, et entre nous, tu m'aurai fait une telle remarque totalement a coté de la plaque, je l'aurai mal pris.
 
A bon entendeur...

Reply

Marsh Posté le 16-08-2003 à 13:03:30    

1) ça marche pas
2) s'il avait ecrit en C++ avec les bibliothèques qui vont avec, il aurait pas eu ce genre de problème
3) le C++ est un langage objet, rien d'à côté de la plaque. giz en est pas à son premier post avec son programme, je sais de quoi il en retourne

Reply

Marsh Posté le 16-08-2003 à 13:54:56    

Bref, je perds mon temps a  discuter de ca avec toi.
 
J'abandonne.

Reply

Marsh Posté le 18-08-2003 à 10:46:42    

VisualC++ a écrit :

Avant de sortir un truc VC++ ou autre compilo a un pb avec time, faudrait lire la doc de time et difftime
Tes var semble etre de type float vu ton print, alors que time retourne des long (time_t)
C comme ton test, difftime retourne un double certe mais c un nombre de seconde niveau granularite, donc un 6.0f niveau printf, les chiffres apres la virgule c juste des erreurs d arrondi.
 
Donc d abord indique tes types, et apres regarde ou tu fais des conversions qui foute la grouille


 
Merci mais je sais y regarder quand j'ai un pb ! : j'ai meme tester leur exemple identique au mien et ca marche pas !
voila la declaration de mes variables :  
 

Code :
  1. time_t   start, finish;
  2. double clock, elapsed_time;


 
et un autre fprintf si vous voulez :
 

Code :
  1. fprintf (f, "%g\t%g\t%6.0f\n", start, finish, difftime( finish, start ));


 
avec extrait de fichier :
 

0.000505819 1     -0
0.000505819 0     -0
0.000505819 0     -0
0.000505819 0     -0
0.000505819 0     -0
0.000505819 0     -0
0.000505819 0     -0
0.000505819 0     -0
0.000505819 0     -0

Reply

Marsh Posté le 18-08-2003 à 10:49:47    

Taz a écrit :

1) ça marche pas
2) s'il avait ecrit en C++ avec les bibliothèques qui vont avec, il aurait pas eu ce genre de problème
3) le C++ est un langage objet, rien d'à côté de la plaque. giz en est pas à son premier post avec son programme, je sais de quoi il en retourne


 
Pour mon ptit programme le C fais tres bien l'affaire, pas besoin que j'inclus de grosse bibliotheque que je ne connais meme pas

Reply

Marsh Posté le 18-08-2003 à 11:02:00    

1) on est cat C++
2) fprintf (f, "%g\t%g\t%6.0f\n", start, finish, difftime( finish, start ))
 
ne marche pas à cause des types alors que
 
f << start << '\t' << finish << '\t'
  << difftime(finish, start) << '\n';
 
fonctionne tout seul (à la mise en forme près)
 
t'en entrain de rame pour des conneries. conneries qui ne sont plus possible avec les stream C++
 
apères tu fais comme tu veux: soit tu fais comme on te dit, soit t'arretes de nous les briser par ce que t'es pas capable de lire la doc et de trouver le format de printf qui va.

Reply

Marsh Posté le 18-08-2003 à 11:08:14    

bon ben j'ai mis un autre type qui te plait cette fois :
 

Code :
  1. fprintf (f, "%ld\t%ld\t%f\n", start, finish, elapsed_time);


 
...et ca marche ;)...bon merci  Mr le susceptible :jap:


Message édité par Giz le 18-08-2003 à 11:09:26
Reply

Marsh Posté le 18-08-2003 à 11:08:45    

Giz > tu persistes a vouloir afficher des doubles alors que c des entiers les 2 premieres valeurs.
 
Efin tout comme Taz, j abandonne te laissant croire que tu lis correctement les man/docs
 
Ps : l exemple de MS sur MSDN (enligne ou pas) me semble pas qu'il font un print de start/stop ;)

Reply

Marsh Posté le 18-08-2003 à 11:09:49    

giz a écrit :

bon ben j'ai mis un autre type qui te plait cette fois :
 

Code :
  1. fprintf (f, "%ld\t%ld\t%f\n", start, finish, elapsed_time);


 
...et ca marche ;)...bon merci  Mr le susceptible :jap:


 
Ah tient le bon type .. comme koi la doc avait raison ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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