NickoMaiden (Normal User)
Pro
Messaggi: 115
Iscritto: 10/06/2009
|
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.
grazie 1000 per le risposte e la pazienza
(mo vediamo che ci dice l'autore del topic a riguardo)
|
|
HeDo (Founder Member)
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
|
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.
|
|
robrock80 (Normal User)
Pro
Messaggi: 143
Iscritto: 11/12/2006
|
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
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6380
Iscritto: 03/01/2010
|
Prova così
Codice sorgente - presumibilmente C/C++ |
#include <windows.h>
SYSTEMTIME systemTime;
GetSystemTime( &systemTime );
FILETIME fileTime;
SystemTimeToFileTime( &systemTime, &fileTime );
ULARGE_INTEGER uli;
uli.LowPart = fileTime.dwLowDateTime;
uli.HighPart = fileTime.dwHighDateTime;
ULONGLONG systemTimeIn_ms( uli.QuadPart/10000 );
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à. |
|
robrock80 (Normal User)
Pro
Messaggi: 143
Iscritto: 11/12/2006
|
Non mi trova la funzione systemTimeIn_ms
|
|
robrock80 (Normal User)
Pro
Messaggi: 143
Iscritto: 11/12/2006
|
ahhhh... E' un costruttore... Perfetto ha funzionato... Ora lo posso convertire a long con un semplice cast?
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6380
Iscritto: 03/01/2010
|
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à. |
|
robrock80 (Normal User)
Pro
Messaggi: 143
Iscritto: 11/12/2006
|
Intendevo dire che nella riga
Codice sorgente - presumibilmente Plain Text |
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++ |
long long int getCurrentTimeMillis(unsigned int startYear) { int getPassedDaysSinceBeginningOfCurrentYear(SYSTEMTIME *); SYSTEMTIME timeInfo; GetSystemTime(&timeInfo); long long int timeMillis = -1; if (startYear < timeInfo.wYear) { int passedDays = getPassedDaysSinceFirstDayOfYear(startYear, timeInfo.wYear - 1) + getDaysCountFromYearToYear(&timeInfo); timeMillis = timeInfo.wMilliseconds + (timeInfo.wSecond*1000) + ((timeInfo.wMinute*60)*1000) + (((timeInfo.wHour*60)*60)*1000) + ((((passedDays * 24)*60LL)*60LL)*1000LL); } return timeMillis; } int getPassedDaysSinceBeginningOfCurrentYear(SYSTEMTIME *timeInfo) { BOOL isLeapYear = ((*timeInfo).wYear) % 4 == 0; //Escludo l'ultimo mese dal conteggio perchè non potrà mai essere trascorso al momento dal calcolo int daysPerMonth[12] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30}; //Oggi non è trascorso int days = (isLeapYear && ((*timeInfo).wMonth) > 2)? ((*timeInfo).wDay) : ((*timeInfo).wDay) - 1; int i; for (i = 0; i < ((*timeInfo).wMonth); i++) { days += daysPerMonth[i]; } return days; } int getDaysCountFromYearToYear(unsigned int startYear, unsigned int endYear) { int leapYears = 0; int normalYears = 0; if (startYear <= endYear) { while (startYear <= endYear) { if (!(startYear % 400 == 0 || (startYear % 4 == 0 && startYear % 100 != 0))) { normalYears++; } else { leapYears++; } startYear++; } } return (normalYears * 365) + (leapYears * 366); }
|
Grazie a tutti per i vostri aiuti Ultima modifica effettuata da robrock80 il 21/03/2010 alle 21:09 |
|