Newsgroup: it.comp.lang.c
Titolo: Come mantenere il valore [di una variabile] di una struct all'interno di un programma senza che venga 'corrotto'

Salve a tutti,
                            ecco il mio nuovo problema:
- faccio girare la seguente routine che mi genera un file che tiene traccia
dei dati calcolati
- ora ho bisogno di calcolare il tempo impiegato nell'operazione.
Ho già fatto un semplice programma che fa tutto bene utilizzando le
#include <time.h>
#include <sys/timeb.h>
e
_ftime( &timebufferS );
il fatto è che adesso appena esco dalla routine in questione perdo il valore
'vero' di timebufferS.time e timebufferS.millitm
che di fatto sballano appena si rientra nella dinlog.
La domanda è: come posso conservarne i valori dall'inizio alla fine del
ciclo?
P.S.: Non ridete per come faccio la differenza tra i due valori dei
timebuffer, non sono un informatico (e accetto consigli!)...:-)
Un grazie e tanti auguri a tutti!
M D
Ecco quello che non funzia (N.B.: il valore stampato all'inizio del file di
log per TimebufferS è quella corretto!)
#include "common.h"
#include <string.h>
#include <time.h>
#include <sys/timeb.h>
FILE *dinamicalog;
void dinlog(char *nomefiledin)
{
 struct _timeb timebufferS,timebufferF;
 char TAB;
 extern int NPT_C,IDO;                                //  IDO : flag di
primo ciclo NPT_C numerototale cicli da compiere
 extern double TEND_C,T0_C;                    // Tempo risp. di fine e
inizio simulazione
 static int II;                                                   //
Variabile di ciclo della routine di integrazione
 char comando[25] ="type ";
 TAB = putchar(9);
// Scrivo l'intestazione SOLO la prima volta che leggo questa subroutine "w"
= write //
 II++;
 if (IDO == 0)
 {
  _ftime( &timebufferS );
  dinamicalog = fopen( nomefiledin, "w" );
  fprintf(dinamicalog,"File: %s\n", nomefiledin);
  fprintf(dinamicalog,"\n\tTime start  =\t%hu.%hu\n",timebufferS.time
,timebufferS.millitm);  // Qui il valore è corretto!!!
fprintf(dinamicalog,"\nII%cXC1%cYC1%crollio%cimbardata%cbeccheggio%csterzo%c
ang_forc\n",TAB,TAB,TAB,TAB,TAB,TAB,TAB,TAB);
  fclose( dinamicalog );
 }
// Scrivo a partire dall'ultima riga scritta :"a" = append [di file
esistente!!!] //
 dinamicalog = fopen( nomefiledin, "a" );
fprintf(dinamicalog,"\n%i%c%f%c%f%c%f%c%f%c%f%c%f%c%f",II,TAB,XC1,TAB,YC1,TA
B,rollio,TAB,imbardata,TAB,beccheggio,TAB,sterzo,TAB,ang_forc);
 if (II == NPT_C)
 {
  _ftime( &timebufferF );
  fprintf(dinamicalog,"\nStats:");
  fprintf(dinamicalog,"\nTelemetria read for %f s",TEND_C-T0_C);
  fprintf(dinamicalog,"\n\tTime finish =\t%hu.%hu",timebufferF.time
,timebufferF.millitm);
  fprintf(dinamicalog,"\n\tTime start  =\t%hu.%hu\n",timebufferS.time
,timebufferS.millitm);  // Qui il valore è 'perso': diventa 52428... (>> di
TimebufferF.time)
// NON RIDETE PER QUELLO CHE STA SOTTO: il mio PC non ha fatto le
elementari.. ;-)
// P.S.: "...abbasso l'uno..." ;-)
  if (timebufferF.millitm == timebufferS.millitm)
   {
    fprintf(dinamicalog,"\t%hu=\n", (timebufferF.time - timebufferS.time ));
   }
  if (timebufferF.time == timebufferS.time)
   {
    fprintf(dinamicalog,"\t%hu =\n", (timebufferF.millitm -
timebufferS.millitm));
   }
  if ((timebufferF.time > timebufferS.time) & (timebufferF.millitm >
timebufferS.millitm))
   {
    fprintf(dinamicalog,"\t%hu.%hu =\n", (timebufferF.time -
timebufferS.time ), (timebufferF.millitm - timebufferS.millitm));
   }
  if ((timebufferF.time > timebufferS.time) & (timebufferF.millitm <
timebufferS.millitm))
   {
    fprintf(dinamicalog,"\nGap: \t%hu.%hu \n", (timebufferF.time -
timebufferS.time -1), (1000+timebufferF.millitm - timebufferS.millitm));
   }
  }
 fclose( dinamicalog );
}

Ho risolto...
Bastava mettere le
                                struct _timeb timebufferS,timebufferF;
nel common.h
Che ci volete... sarà l'influenza!
Ciao
            M D
"M D" <md...@NOSPAMinwind.it> ha scritto nel messaggio
news:92fh00$eld$1...@nread1.inwind.it...
