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 :( |
|
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. void Config_os::on_p_akt_down_clicked() { DWORD IdWatku; watek = 1; CreateThread( NULL, 0, & Config_os::pobierz,( PVOID ) watek, 0, & IdWatku ); }
DWORD WINAPI Config_os::pobierz( PVOID pvParam ) { switch(( int ) pvParam ) { case 1: pobierz_aktualizacje(); break; } return 0; }
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 ]; get_file( akt_lnk[ i ].c_str(), pobieranie.str().c_str(), "wb", 2 ); } } }
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 ); }
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 |
|
maniek1310 Temat założony przez niniejszego użytkownika |
» 2014-01-26 22:10:10 I jak macie jakiś pomysł ?? |
|
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 |
|
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. |
|
1 « 2 » |