Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[cURL][QT] Wyświetlanie w qTableWidget ile pobrano pliku

Ostatnio zmodyfikowano 2014-01-27 20:34
Autor Wiadomość
sajmon
» 2014-01-26 17:37:54
Nie podałeś w jaki sposób używasz tego get_file. Qt jest obiektowe, więc zrób wszystko na klasach a unikniesz sytuacji gdzie coś odmawia ci dostępu :(
P-103266
maniek1310
Temat założony przez niniejszego użytkownika
» 2014-01-26 19:34:05
@sajmon zrobiłem tak jak radziłeś i wszystko działa prawidłowo, ale teraz mam problem z wątkami(funkcja jest dodana do klasy qt ale wyskakuje błąd w CreateThread.
C/C++
// funkcja, ktora uruchamia pobieranie
void Config_os::on_p_akt_down_clicked()
{
    DWORD IdWatku;
    watek = 1;
    CreateThread( NULL, 0, & Config_os::pobierz,( PVOID ) watek, 0, & IdWatku );
}
// funkcja, która tworzy wątek
DWORD WINAPI Config_os::pobierz( PVOID pvParam )
{
    switch(( int ) pvParam )
    {
    case 1:
        pobierz_aktualizacje();
        break;
    }
   
    return 0;
}
// funkcja, ktora pobiera pliki
void Config_os::pobierz_aktualizacje()
{
    int licznik2 = 0;
    licznik_test = licznik - licznik_test;
   
    for( int i = 1; i <= licznik; i++ )
    {
        if( spr_akt[ i ] == false and akt_name[ i ] != "" )
        {
            licznik2++;
            pobieranie.str( "" );
            pobieranie << "dane\\temp\\aktualizacje\\";
            pobieranie << akt_name[ i ];
            //ui->t_akt_down->setText("Trwa pobieranie aktualizacji...");
            get_file( akt_lnk[ i ].c_str(), pobieranie.str().c_str(), "wb", 2 );
            //ui->t_akt_down->setText("Zakonczono pobieranie aktualizacji.....");
        }
    }
}
// funkcja pobierajaca pliki
void Config_os::get_file( const char * url, const char * file_name, const char * mode, int a )
{
    CURL * easyhandle = curl_easy_init();
    curl_easy_setopt( easyhandle, CURLOPT_URL, url );
    std::FILE * file = std::fopen( file_name, mode );
    if( a == 1 )
         curl_easy_setopt( easyhandle, CURLOPT_NOPROGRESS, 0 );
   
    if( a == 2 )
         curl_easy_setopt( easyhandle, CURLOPT_PROGRESSFUNCTION, & Config_os::progressbar );
   
    curl_easy_setopt( easyhandle, CURLOPT_WRITEDATA, file );
    curl_easy_perform( easyhandle );
    curl_easy_cleanup( easyhandle );
    fclose( file );
}
// funkcja wypisujaca ile % pobralo sie
int Config_os::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 ile_procent( std::ostringstream::ate );
   
    if( dltotal != 0 and dlnow != 0 )
    {
        ile_procent << dltotalcalk;
        ile_procent << " %";
    } else {
        ile_procent << "0 %";
    }
   
    ui->t_akt_down->setText( ile_procent.str().c_str() );
   
    return 0;
}
błąd: cannot convert 'DWORD (Config_os::*)(PVOID) {aka long unsigned int (Config_os::*)(void*)}' to 'LPTHREAD_START_ROUTINE {aka long unsigned int (__attribute__((__stdcall__)) *)(void*)}' for argument '3' to 'void* CreateThread(LPSECURITY_ATTRIBUTES, SIZE_T, LPTHREAD_START_ROUTINE, LPVOID, DWORD, LPDWORD)'
     CreateThread(NULL, 0, &Config_os::pobierz, (PVOID)watek, 0, &IdWatku);
                                                                         ^
A jak zrobiłem tak
CreateThread( NULL, 0,( LPTHREAD_START_ROUTINE ) & Config_os::pobierz,( PVOID ) watek, 0, & IdWatku );
To wyskakuje, dużo błędów odnośnie moc_config_os.cpp
P-103277
maniek1310
Temat założony przez niniejszego użytkownika
» 2014-01-26 22:10:10
I jak macie jakiś pomysł ??
P-103290
sajmon
» 2014-01-27 12:55:08
Bo ja wiem nie znam winapi, ale ty łączysz 3 biblioteki a możesz użyć tylko 1 bo Qt oferuje ci wszystko czego potrzebujesz. Spróbuj chociaż te wątki tworzyć QThread a najlepiej jak użyjesz QNetworkAccesManager (czy jakoś tak), który automatycznie działa w innym wątku niż gui
P-103310
maniek1310
Temat założony przez niniejszego użytkownika
» 2014-01-27 20:34:07
Chciałbym zrobić wszystko na qt ale problemem jest mój angielski, gdyż nie znam go na takim stopniu, żeby móc czytać dokumentację ze zrozumieniem.
P-103358
1 « 2 »
Poprzednia strona Strona 2 z 2