Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    46

    funzione getTime() in c++ sotto Windows?

    Salve, necessito di una qualche funzione di libreria c++ che mi restituisca il tempo corrente. In pratica devo temporizzare una un algoritmo facendo la classica differenza di tempi tra prima che venga chiamato e dopo che ha effettuate tutte le sue belle operazioncine.

    conosco solo clock_t che però mi restituisce il numero di clock e non il tempo.
    possibile che non esista una funzione getTime come per java e pascal..
    naturalmente la cosa sotto linux è fattibile..ma a me serve sotto windows.
    Grazie in anticipo per la risposta.

  2. #2

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    46
    mi servirebbe una funzione che restituisce i nanosecondi..queste arrivano fino ai millisecondi.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ti servirebbe anche un hardware e un sistema operativo che possano gestire i nanosecondi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    Originariamente inviato da oregon
    Ti servirebbe anche un hardware e un sistema operativo che possano gestire i nanosecondi ...
    che poi a cosa servirebbe?qualunque misurazione verrebe falsata dal ritardo tra il controller usb (segnale tastiera), southbridge, fsb e cpu..o sbaglio?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Appunto per questo gli ho detto di cercare un altro hardware, non certo un PC ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Ci sono sempre i contatori ad alta risoluzione.
    QueryPerformanceCounter
    QueryPerformanceFrequency
    In fondo alla pagina di QueryPerformanceCounter c'è anche una classe che può essere utilizzata per misurare comodamente la durata di una qualche operazione.

    In generale, comunque, come ti è già stato detto queste misure così precise hanno poco senso: solo la chiamata alle funzioni in questione ti sballa il conto (il tempo per entrare in ring 0 e uscirne non è indifferente), senza contare che il tuo algoritmo può essere interrotto a metà per dare la CPU ad un altro processo, nel qual caso potresti ottenere un ritardo nell'ordine delle decine o addirittura centinaia di millisecondi (a seconda di che parte del quanto di tempo assegnato l'applicazione impieghi).
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    46
    si..in effetti era questo il mio timore. il problema mi viene dal fatto che dovrei fare una analisi ammortizzata di un semplice counting sort per vari ordini di grandezza. solo che fino a 200.000 elementi mi risulta come tempo di esecuzione sempre 0 millisecondi e non riesco ad inserire più di 500.000 elementi. Di conseguenza non posso modellare l'andamento dei tempi all'aumentare dell'input.

  10. #10
    In questi casi di solito o si aumenta il numero di elementi (come mai non puoi farlo?) oppure si ripete l'esecuzione dell'algoritmo numerose volte, ma in questo caso hai il problema che se l'ordinamento è effettuato in-place devi rigenerarti un array disordinato, e questo tempo si andrebbe ad aggiungere a quello dell'esecuzione dell'algoritmo.
    Potresti provare a prepararti l'array da ordinare da una parte e usare un altro array come array di lavoro; ad ogni iterazione andrai a copiare l'array da ordinare in quello "di lavoro", e poi eseguirai l'ordinamento. Al tempo complessivo ottenuto andrai a togliere il tempo complessivo di copia, che otterrai cronometrando separatamente l'esecuzione di n copie dell'array originale in quello di lavoro (dove n è il numero di iterazioni di cui parlavo prima). È un metodo piuttosto impreciso, ma credo che sia il meglio che tu possa fare.
    Per avere risultati sensati, calibra n in modo che il solo tempo di copia complessivo raggiunga almeno qualche decina di millisecondi.
    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.