Tempo di durata di una routine

di Arcade il
23 risposte
Ciao a tutti, è da tanto che programmo in diversi linguaggi ma è da veramente poco che affronto il C. Sto usando il C++ Ver 3 per dos. Vorrei sapere quanti millisecondi vengono impiegati per lo svolgimento di una routine. In python di solito uso time.time(). Ho provato anche in c (cercando in rete) ma ho visto che funziona diversamente e non ne capisco l'output in quanto mi da un risultato sempre uguale. Nella fattispecie ho provato con:
#include <time.h>

time_t *t;
time(t);
printf("%d\n",t);
...routine...
time(t);
printf("%d\n",t);

23 Risposte

  • Hai usato il calendario che ha la risoluzione in secondi
    
    #include <stdio.h>
    #include <time.h>
    
    int main(){
        clock_t t1 = clock();
        for(int i = 0; i < 10000000; i++);
        clock_t t2 = clock();
        printf("%f\n", (float)(t2 - t1)/CLOCKS_PER_SEC);
    
        return 0;
    }
    
  • Grazie per la risposta, ma mi ritorna sempre zero... Funziona con una versione più avanzata. La mia versione è la 3 x dos.
    Se scarico un time.h più recente pensi che possa funzionare?
  • Quanti vale t1 e quanto t2?

    Ver 3 di quale compilatore c++? Sai a cosa servono i file .h ?
  • Turbo c++ 3.0
  • Vedi se è supportata gettime() in dos.h


    Se è supportata puoi scriverti le formule per i centesimi di secondo.


    Comunque ti sei imbarcato in un progetto che sarebbe molto complesso per un professionista. Valuta bene se ne vale la pena o se non ci sono altre strade
  • Premesso che entrambe le versioni della Borland (sia il Turbo C e sia Turbo C++) furono rilasciate prima della standardizzazione dei relativo linguaggio.
    https://www.linkedin.com/pulse/move-forward-from-using-turbo-c-ide-roy-antony-arnold-g
    Dovendo lavorare con compilatori datati, devi far riferimento alle specifiche istruzioni della versione, basta fare una ricerca; ti cito i primi link trovati:
    http://www.sandroid.org/TurboC/functionlist.htm
    http://www.softwareandfinance.com/Turbo_CPP/HeaderFiles/time.html

    Considera, che il file header (time.h) della Borland, sin dalle versioni iniziali, è sempre stato dotato della funzionalità time.
    Pertanto detta funzionalità puù essere sfruttata, indipendetemte dalla versione, come schematicamente, qui di seguito, riportato_
    
    #include <stdio.h>
    #include <time.h>
    int main()
    {
        int i,j,k;
        long tm;
        tm= time(0);
        for(i = 0; i < 100; i++)
             for(j = 0; j < 100; j++)
        		 for(k = 0; k < 100; k++);
        printf("Tempo di esecuzione : %ld \n", time(0) - tm);
        return 0;
    }
    
    Altrimenti si devono sfruttare le specifiche funzionalità messe a disposizione o le implementazioni per assicurare una compatibilità con lo standard (esempio clock, clock_t, ecc.):
    https://stackoverflow.com/questions/3220477/how-to-use-clock-in-c
    https://levelup.gitconnected.com/8-ways-to-measure-execution-time-in-c-c-48634458d0f9
  • Ok, grazie mille.
    Stasera provo.
  • Scusate ma non sono riuscito a provare fino a ieri sera. Purtroppo anche questa soluzione rende solo i secondi... Niente frazioni di secondo
  • Fai una prova con la classe timer del Borland C 3.1

    In ogni caso la precisione dipende dal sistema operativo e con il Dos questa va tra i 20 e i 50 ms.
  • oregon ha scritto:


    Fai una prova con la classe timer del Borland C 3.1
    Che trovo?????
  • Che vuol dire "che trovo?"?
  • Dove posso trovarla...
  • Arcade ha scritto:


    ... Purtroppo anche questa soluzione rende solo i secondi... Niente frazioni di secondo
    La documentazione Borland, infatti, indica per time (del file header - time.h) che restituisce il tempo in secondi ma se vuoi determinare il tempo di durata di una routine, con tempi inferiori dei secondi, è sufficiente eseguirla un numero x di volte e valutare il tempo medio di esecuzione come frazione con x; e ciò anche alla luce dell'interrupt in DOS necessario alla gestione del clock.
  • Volevo una cosa un po' più precisa... Tanto vale usare un cronometro a mano....
Devi accedere o registrarti per scrivere nel forum
23 risposte