maniek1310 Temat założony przez niniejszego użytkownika |
[cURL]Sprawdzanie szybkości pobierania pliku » 2013-09-15 13:40:09 Witam jest jakaś oddzielna funkcja pozwalająca sprawdzić z jaką prędkością pobierany jest plik z internetu ?? Tutaj mam moją funkcję pobierającą plik : void get_file( const char * url, const char * file_name, const char * mode ) { CURL * easyhandle = curl_easy_init(); curl_easy_setopt( easyhandle, CURLOPT_URL, url ); std::FILE * file = std::fopen( file_name, mode ); curl_easy_setopt( easyhandle, CURLOPT_NOPROGRESS, 0 ); curl_easy_setopt( easyhandle, CURLOPT_PROGRESSFUNCTION, progressbar ); curl_easy_setopt( easyhandle, CURLOPT_WRITEDATA, file ); curl_easy_perform( easyhandle ); curl_easy_cleanup( easyhandle ); fclose( file ); } |
|
pekfos |
» 2013-09-15 13:50:21 Możesz, zamiast do pliku, przekazywać dane do funkcji (CURLOPT_WRITEFUNCTION), a tam bez problemu to obliczysz. |
|
maniek1310 Temat założony przez niniejszego użytkownika |
» 2013-09-15 14:01:31 Aktualnie mam zrobione z funkcją progressbar, tylko że nie wiem jak obliczyć prędkość z dltotal i dlnow. curl_easy_setopt( easyhandle, CURLOPT_PROGRESSFUNCTION, progressbar ); funkcja progressbar int progressbar( void * clientp, double dltotal, double dlnow, double ultotal, double ulnow ) { int dltotalcalk =( dlnow * 100 ) / dltotal; dltotal /= 1024; dltotal /= 1024; dlnow /= 1024; dlnow /= 1024; std::ostringstream rozmiar( std::ostringstream::ate ); std::ostringstream sciagnieto( std::ostringstream::ate ); std::ostringstream ile_procent( std::ostringstream::ate ); if( dltotal != 0 and dlnow != 0 ) { rozmiar << dltotal; sciagnieto << dlnow; ile_procent << dltotalcalk; rozmiar << " mb"; sciagnieto << " mb"; ile_procent << " %"; } else { rozmiar << "Rozpoczynanie"; sciagnieto << "Rozpoczynanie"; ile_procent << "0 %"; } SetWindowText( hStatic4, rozmiar.str().c_str() ); SetWindowText( hStatic6, sciagnieto.str().c_str() ); SetWindowText( hStatic9, ile_procent.str().c_str() ); SendMessage( hProgressBar, PBM_SETPOS,( WPARAM ) dltotalcalk, 0 ); return 0; } |
|
pekfos |
» 2013-09-15 14:07:12 Licz czas między wywołaniami i ilość, w tym czasie, pobranych danych. |
|
maniek1310 Temat założony przez niniejszego użytkownika |
» 2013-09-15 14:21:05 Ciągle wyskakuje 0. Tutaj kod: int progressbar( void * clientp, double dltotal, double dlnow, double ultotal, double ulnow ) { clock_t poczatek = obliczSekundy( clock() ); double poczatek1 = dlnow; czekaj( 500 ); double poczatek2 = dlnow; double roznica = poczatek2 - poczatek1; int dltotalcalk =( dlnow * 100 ) / dltotal; dltotal /= 1024; dltotal /= 1024; dlnow /= 1024; dlnow /= 1024; std::ostringstream rozmiar( std::ostringstream::ate ); std::ostringstream sciagnieto( std::ostringstream::ate ); std::ostringstream ile_procent( std::ostringstream::ate ); std::ostringstream predkosc( std::ostringstream::ate ); if( dltotal != 0 and dlnow != 0 ) { rozmiar << dltotal; sciagnieto << dlnow; ile_procent << dltotalcalk; predkosc << roznica; rozmiar << " mb"; sciagnieto << " mb"; ile_procent << " %"; } else { rozmiar << "Rozpoczynanie"; sciagnieto << "Rozpoczynanie"; ile_procent << "0 %"; } SetWindowText( hStatic4, rozmiar.str().c_str() ); SetWindowText( hStatic6, sciagnieto.str().c_str() ); SetWindowText( hStatic9, ile_procent.str().c_str() ); SetWindowText( hStatic8, predkosc.str().c_str() ); SendMessage( hProgressBar, PBM_SETPOS,( WPARAM ) dltotalcalk, 0 ); return 0; }
void czekaj( int iMilisekundy ) { clock_t koniec = clock() + iMilisekundy * CLOCKS_PER_SEC / 1000.0; while( clock() < koniec ) continue; }
double obliczSekundy( clock_t czas ) { return static_cast < double >( czas ) / CLOCKS_PER_SEC; } |
|
pekfos |
» 2013-09-15 14:25:37 Bo to tak nie działa.. |
|
maniek1310 Temat założony przez niniejszego użytkownika |
» 2013-09-15 14:58:01 A mógłby mi ktoś to przerobić , bo juz nie mam sił, ciągle pokazuje 0. |
|
pekfos |
» 2013-09-15 15:01:46 Nikt tego za Ciebie nie zrobi. Twój kod nie działa, bo myślisz, że jak będziesz czekać, to dlnow, w jakiś magiczny sposób, zaktualizuje swoją wartość. Aby obliczyć różnicę, musisz mieć wartości dlnow z aktualnego i poprzedniego wywołania funkcji. |
|
« 1 » 2 3 |