Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Calcolare il tempo di esecuzione di una funzione

    Ciao a tutti,

    io devo calcolare il tempo di esecuzione di una funzione.
    Praticamente devo calcolare il tempo trascorso tra l'inizio e la fine della funzione.
    Ma non so come fare ne che funzioni usare.

    Potete darmi qualche dritta??

    Grazie mille,
    Guido

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Moderazione

    Quale linguaggio? :master:
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Supponendo che sia C/C++

    Puoi utilizzare le API di Windows che mettono a disposizione QueryPerformanceCounter e QueryPerformanceFrequency.
    Mi fermo qui per ora, se il linguaggio è quello continueremo il discorso
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Si scusatemi...pensavo di averlo indicato...comunque è proprio C\C++ il linguaggio!!

  5. #5
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Dunque per prima cosa prima della funzione devi chiamare QueryPerformanceCounter.
    Questo chiede e resituisce allo stesso tempo un puntatore a LARGE_INTEGER.
    ti consiglio su VisualC++ 2005 di dichiarare un __int64 e di utilizzare un reinterpret_cast per convertirlo in un puntatore a large_integer.
    Cosi hai la frequenza al secondo.

    Dopo di che all'inizio della funzione dichari altri 2 __int64, e chiami QueryPerformaceCounter passando il primo __int64.
    Alla fine della funzione chiami di nuovo Counter e gli passi il secondo __int64.
    Sottrai il secondo int al primo e moltiplichi il risultato per l'int che ti ha dato QueryPerformaceFrequency.

    Hai avuto il tempo in secondi dell'esecuzine della funzione.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    tieni presente che il tempo di esecuzione effettivo è un po minore, in quanto le chamate a QueryPerformanceCounter all'interno della tua funzione la rallentano un po.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    Se non ti serve una risoluzione così elevata puoi anche usare la più semplice funzione GetTickCount():
    codice:
    cout<<"Inizia l'operazione..."
    DWORD StartTime=GetTickCount();
    //...
    cout<<"Tempo trascorso: "<<(double)(GetTickCount()-StartTime)/1000<<" secondi.";
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.