Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444

    [C++] Millisecondi trascorsi

    Devo fare la stima della velocità di esecuzione di due programmi, quindi vorrei creare dei file che misurano il tempo di esecuzione.

    I due file, ad esempio, potrebbero essere

    quicksort.exe
    bubblesort.exe

    Pensavo di fare un file .bat in questo modo

    time
    quicksort
    time
    bubblesort
    time

    il problema è che il comando time di Dos visualizza l'ora e poi chiede di impostarla di nuovo, e se si imposta il parametro /t, il formato restituito contiene solo ore e minuti.

    Pensavo allora di creare un nuovo exe che visualizzi, ad esempio, il numero di millisecondi trascorsi da una certa data (es. il formato unix che calcola dal 1 gennaio 1970).

    Il problema ora è che tutte le funzioni che ho trovato in C++ parlano di secondi, non millisecondi, e a me serve questa precisione per fare un buon lavoro. Sapete come aiutarmi?
    *********************************
    Andrea
    *********************************

  2. #2
    Dovresti usare i tick del clock del processore. Non so se c'e' una funzione standard pero'...
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  3. #3
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Prova con GetTickCount().

    E' nel kernel32 di Win.

    Ciao,
    Ciao, Brainjar

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    codice:
    #include <iostream.h> 
    
    #ifdef _WIN32 
    #include <windows.h> 
    static LARGE_INTEGER _tstart, _tend; 
    static LARGE_INTEGER freq; 
    
    void tstart(void) 
    { 
    static int first = 1; 
    
    if(first) { 
    QueryPerformanceFrequency(&freq); 
    first = 0; 
    } 
    QueryPerformanceCounter(&_tstart); 
    } 
    void tend(void) 
    { 
    QueryPerformanceCounter(&_tend); 
    } 
    
    double tval() 
    { 
    return ((double)_tend.QuadPart - 
    (double)_tstart.QuadPart)/((double)freq.QuadPart); 
    } 
    #else 
    #include <sys/time.h> 
    static struct timeval _tstart, _tend; 
    static struct timezone tz; 
    
    void tstart(void) 
    { 
    gettimeofday(&_tstart, &tz); 
    } 
    void tend(void) 
    { 
    gettimeofday(&_tend,&tz); 
    } 
    
    double tval() 
    { 
    typedef signed long long s; 
    s t1, t2; 
    
    t1 = (s)_tstart.tv_sec + (s)_tstart.tv_usec/(1000*1000); 
    t2 = (s)_tend.tv_sec + (s)_tend.tv_usec/(1000*1000); 
    return t2-t1; 
    } 
    #endif 
    int main() { 
    int c; 
    cout << "Inserire numero cicli: "; 
    cin >> c; 
    tstart(); 
    for(register int i = 0; i < c; i++) { 
    ; 
    } 
    tend(); 
    cout << "Il tuo computer ci ha messo: " << tval() << " secondi.\n\n"; 
    cout << "Premi un tasto ed invio per continuare"; 
    char e; 
    cin >> e; 
    
    return 0; 
    }
    questo funziona in windows e forse anche in linux, non ho provato se funzionano i preprocessori, volendo puoi fare quallo che volevi fare nel bat direttamente in C++, prendi l'ora con ctime all'inizio, prendi l'ora alla fine e fai la differenza.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

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.