Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Ora corrente in millisecondi
Forum - C/C++ - Ora corrente in millisecondi - Pagina 2

Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo
Avatar
NickoMaiden (Normal User)
Pro


Messaggi: 115
Iscritto: 10/06/2009

Segnala al moderatore
Postato alle 0:24
Domenica, 21/03/2010
vista la pagina, bello :O non riesco ad immaginare un'applicazione pratica che sfrutti questo timer cmq buono a sapersi che esiste,ne terrò conto di sicuro.
:k: grazie 1000 per le risposte e la pazienza
(mo vediamo che ci dice l'autore del topic a riguardo)

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 1:06
Domenica, 21/03/2010

i timer ad alta risoluzione vengono usati ad esempio nel playback di stream audio/video, in situazioni "time critical" legate a dell'hardware esterno o per effettuare il profiling di un algoritmo nel modo più accurato possibile.

PM Quote
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 14:08
Domenica, 21/03/2010
Ciao. Ti ringrazio per la risposta ma a me serve il tempo univoco e cioè il numero di millisecondi compresi gli anni i mesi e i giorni, per farti capire, mi serve una funzione come il metodo di java System.getCurrentTimeMillis(): nella struct che mi hai indicato ho visto che ci sono sia gli anni, che i mesi, che i giorni ma il problema ora è che ora di mezzo ci sono anche gli anni bisestili e i mesi hanno durata diversa

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:15
Domenica, 21/03/2010
Prova così

Codice sorgente - presumibilmente C/C++

  1. #include <windows.h>
  2.  
  3. SYSTEMTIME systemTime;
  4. GetSystemTime( &systemTime );
  5.  
  6. FILETIME fileTime;
  7. SystemTimeToFileTime( &systemTime, &fileTime );
  8.  
  9. ULARGE_INTEGER uli;
  10. uli.LowPart = fileTime.dwLowDateTime;
  11. uli.HighPart = fileTime.dwHighDateTime;
  12.  
  13. ULONGLONG systemTimeIn_ms( uli.QuadPart/10000 );
  14.  
  15. printf("%ul\n", systemTimeIn_ms);



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 14:25
Domenica, 21/03/2010
Non mi trova la funzione systemTimeIn_ms

PM Quote
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 14:33
Domenica, 21/03/2010
ahhhh... E' un costruttore... Perfetto ha funzionato... Ora lo posso convertire a long con un semplice cast?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:53
Domenica, 21/03/2010
Testo quotato

Postato originariamente da robrock80:

ahhhh... E' un costruttore... Perfetto ha funzionato... Ora lo posso convertire a long con un semplice cast?



Un costruttore? Che dici?

Non devi convertirlo a long ... il valore deve essere a 64 bit ... (sono tanti i millisecondi ...)


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 19:59
Domenica, 21/03/2010
Intendevo dire che nella riga
Codice sorgente - presumibilmente Plain Text

  1. ULONGLONG systemTimeIn_ms( uli.QuadPart/10000 );


viene invocato il costruttore di ULONGLONG e io invece avevo scambiato systemTimeIn_ms per una funzione.

Comunque ho risolto: mi sono creato la mie funzioni per calcolare il tempo in millisecondi a partire da un anno da passare in input alla funzione. Ecco il codice in caso qualcuno si dovessa imbattere nello stesso problema

Codice sorgente - presumibilmente C++

  1. long long int getCurrentTimeMillis(unsigned int startYear) {
  2.         int getPassedDaysSinceBeginningOfCurrentYear(SYSTEMTIME *);
  3.         SYSTEMTIME timeInfo;
  4.         GetSystemTime(&timeInfo);
  5.         long long int timeMillis = -1;
  6.         if (startYear < timeInfo.wYear) {
  7.                 int passedDays = getPassedDaysSinceFirstDayOfYear(startYear, timeInfo.wYear - 1)
  8.                                 + getDaysCountFromYearToYear(&timeInfo);
  9.                 timeMillis =
  10.                         timeInfo.wMilliseconds
  11.                         + (timeInfo.wSecond*1000)
  12.                         + ((timeInfo.wMinute*60)*1000)
  13.                         + (((timeInfo.wHour*60)*60)*1000)
  14.                         + ((((passedDays * 24)*60LL)*60LL)*1000LL);
  15.         }
  16.     return timeMillis;
  17. }
  18.  
  19.  
  20. int getPassedDaysSinceBeginningOfCurrentYear(SYSTEMTIME *timeInfo) {
  21.         BOOL isLeapYear = ((*timeInfo).wYear) % 4 == 0;
  22.         //Escludo l'ultimo mese dal conteggio perchè non potrà mai essere trascorso al momento dal calcolo
  23.         int daysPerMonth[12] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
  24.         //Oggi non è trascorso
  25.         int days = (isLeapYear && ((*timeInfo).wMonth) > 2)? ((*timeInfo).wDay) : ((*timeInfo).wDay) - 1;
  26.         int i;
  27.         for (i = 0; i < ((*timeInfo).wMonth); i++) {
  28.                 days += daysPerMonth[i];
  29.         }
  30.         return days;
  31. }
  32.  
  33. int getDaysCountFromYearToYear(unsigned int startYear, unsigned int endYear) {
  34.         int leapYears = 0;
  35.         int     normalYears = 0;
  36.         if (startYear <= endYear) {
  37.                 while (startYear <= endYear) {
  38.                         if (!(startYear % 400 == 0
  39.                                         || (startYear % 4 == 0 && startYear % 100 != 0))) {
  40.                                 normalYears++;
  41.                         } else {
  42.                                 leapYears++;
  43.                         }
  44.                         startYear++;
  45.                 }
  46.         }
  47.         return (normalYears * 365) + (leapYears * 366);
  48. }



Grazie a tutti per i vostri aiuti

Ultima modifica effettuata da robrock80 il 21/03/2010 alle 21:09
PM Quote
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo