Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Pomoc] Obliczanie prędkości pobierania pliku


Rekomendowane odpowiedzi

Opublikowano

Witam mam dwie funkcje, które zajmują się pobieraniem pliku z internetu, wyświetla nazwę , rozmiar ile pobrał (w mb i %) ale nie wiem jak policzyć z jaką prędkością pobiera. Może macie jakieś pomysły ??

 

Tutaj daje te dwie funkcje (oczywiście wywołanie funkcji get_file odbywa się wcześniej w programie)

 

...
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 << " %";

        SetWindowText(hStatic10, "Pobieranie ...");
    }else{
        ile_procent << "0 %";
        SetWindowText(hStatic10, "Rozpoczynanie pobierania");
    }

    SetWindowText(hStatic6, rozmiar.str().c_str());
    SetWindowText(hStatic8, sciagnieto.str().c_str());
    SetWindowText(hStatic9, ile_procent.str().c_str());

    SendMessage( hProgressBar, PBM_SETPOS,( WPARAM ) dltotalcalk, 0 );

    return 0;
}

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 );
}
...
Opublikowano

jesli funkcja progressbar wywoluje się co sekundę to wystarczy zrobić zmienna globalną i pod koniec funkcji do niej przypisywać ile zostało ściągnięte.

double olddl = 0;
int progressbar(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow)
{
    int dltotalcalk = (dlnow * 100) / dltotal;

    double speed = dlnow - olddl;

    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 << " %";
 
        SetWindowText(hStatic10, "Pobieranie ...");
    }else{
        ile_procent << "0 %";
        SetWindowText(hStatic10, "Rozpoczynanie pobierania");
    }
 
    SetWindowText(hStatic6, rozmiar.str().c_str());
    SetWindowText(hStatic8, sciagnieto.str().c_str());
    SetWindowText(hStatic9, ile_procent.str().c_str());
 
    SendMessage( hProgressBar, PBM_SETPOS,( WPARAM ) dltotalcalk, 0 );
    olddl = dlnow;
    return 0;
}

Nie pomagam na PW, od tego macie forum!!!

 

#PHP-things

 

 

08FMpDu.png

 

Opublikowano

@up

rozumiesz słowo jeśli ?

 

 

Problem glówny tutaj nie jest banalnie proste działanie z podstawówki tylko uzyskanie potrzebnych informacji do jego obliczenia.

nie sądze żeby było to trudne do rozwiązania (widze że mamy do czynienia z curlem), ale jednak trzeba by trochę poszukać (na pierwszy rzut oka w google nie ma) czego mi sie nie chce. Pisze byście przestali pisać o tym samym gównie które nie ma zbyt wiele wspólnego z problemem, a już na pewno nie z jego rozwiązaniem.

Opublikowano

Wydaje mi sie ze tak prowizorycznie powinno zadzialac ,ale co do tego pewnosci nie mam , tak to na strzała napisalem xD

 

...
int progressbar(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow)
{
    int dltotalcalk = (dlnow * 100) / dltotal;
	int ls;
	int s;
 	int szybkosc=0;
	int lmb=0;
	int sz=0;

 
 	SYSTEMTIME st;
	GetLocalTime(&st);
	s = st.wSecond;
    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 ... Predkosc pobierania "<<szybkosc<<" Kb/s";
        ile_procent << " %";

        SetWindowText(hStatic10, "Pobieranie ...");
        
       
 		if(s!=ls)
		{
			sz=mb-lmb;
			
			GetLocalTime(&st);
			s = st.wSecond;
 			ls=s;
 			szybkosc=sz/8;
 			lmb=mb;
		
		}

    }
	else
	{
		if(s!=ls)
		{
			GetLocalTime(&st);
			s = st.wSecond;
 			ls=s;
		}
        ile_procent << "0 %";
        SetWindowText(hStatic10, "Rozpoczynanie pobierania");
    }

    SetWindowText(hStatic6, rozmiar.str().c_str());
    SetWindowText(hStatic8, sciagnieto.str().c_str());
    SetWindowText(hStatic9, ile_procent.str().c_str());

    SendMessage( hProgressBar, PBM_SETPOS,( WPARAM ) dltotalcalk, 0 );

    return 0;
}
...


 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...