PDA

Visualizza versione completa : rilevare la velocità di trasferimento


yag[YOG]
17-07-2003, 10.26.02
ragazzi tramite api o qualche altra cosa in c++ come posso fare
per rilevare le velocità di trasferimento della connessione attuale del computer ?

LoryOne
17-07-2003, 12.28.53
Lunghezza file/tempo impiegato per scaricarlo [bytes/sec]
Questa è la regola generale.

Poichè la velocità di trasferimento non è mai costante, se scegli come unità di misura il secondo, per ogni secondo di scarico dovresti trovare la velocità in questo modo:

Lunghezza file=3072 bytes
Sec 1
2048 bytes ---> Velocità = 2048 bytes/sec
Sec 2
1024 bytes ---> Velocità = 1024 bytes/sec

Visto che c'hai messo 2 secondi per completare l'operazione, puoi tranquillamente affermare che la tua

Velocità media=(2048+1024)/2= 1536 bytes/sec

Ciao :)

yag[YOG]
17-07-2003, 13.42.26
Originariamente inviato da LoryOne
Lunghezza file/tempo impiegato per scaricarlo [bytes/sec]
Questa è la regola generale.

Poichè la velocità di trasferimento non è mai costante, se scegli come unità di misura il secondo, per ogni secondo di scarico dovresti trovare la velocità in questo modo:

Lunghezza file=3072 bytes
Sec 1
2048 bytes ---> Velocità = 2048 bytes/sec
Sec 2
1024 bytes ---> Velocità = 1024 bytes/sec

Visto che c'hai messo 2 secondi per completare l'operazione, puoi tranquillamente affermare che la tua

Velocità media=(2048+1024)/2= 1536 bytes/sec
Ciao :)
ma posso fare tutto tramite il mio programma linearmente , oppure devo svegliare qualche thread ?
ecco il mio codice :
do
{
//prendo il tempo 1
SYSTEMTIME st,st2;
GetSystemTime(&st);

//vado a blocchi di 50 byte
if (!InternetReadFile (hConnect, szData, 50, &dwLength) )
{
CloseHandle (hFile);
mesErr();
return FALSE;
}
if (!dwLength)
break; // Condition of dwLength=0 indicate EOF. Stop.

//scrivo i dati nell'hd ecc.

//prendo il tempo 1
GetSystemTime(&st2);
unsigned short temp = st2.wMilliseconds - st.wMilliseconds;

if (temp > 0 )
temp = dwLength /(st2.wMilliseconds - st.wMilliseconds);
//temp dovrebbe essere il mio tr(transfer rate)
//ma purtroppo così non funziona

} // do
while (TRUE);

Dove sbaglio ? come devo modificare il mio codice...

LoryOne
17-07-2003, 15.50.37
Prova a scaricare un file da Internet usando Explorer.
La maschera per lo scarico ti fornisce diverse informazioni:
1) La percentuale di scarico
2) Il n° di Bytes sequenziali di scarico
3) La velocità di trasferimento

Se fai bene attenzione, la velocità di trasferimento è data dalla differenza in bytes tra due secondi consecutivi.(più o meno)
Tu devi fare lo stesso.

Ciao :)