[Qt]Niepożądane tworzenie się wielu wątków?
Ostatnio zmodyfikowano 2015-01-04 20:00
Harrel Temat założony przez niniejszego użytkownika |
[Qt]Niepożądane tworzenie się wielu wątków? » 2014-12-31 19:03:42 Tworzę program, który z x różnych stron/linków sciąga dane. Tych linków jest bardzo dużo i po jakiejś większej ilości wykorzystanych linków, nie udaje się ściągnąć danych ze strony i wyskakuje błąd - 'QThread::start: Failed to create thread()'. Wydaję mi się, że po prostu dla każdego linku tworzony jest osobny wątek i nie jest on zamykany. W jaki sposób mógłbym poradzić sobie z tym problemem? Struktura kodu wygląda mniej więcej tak: void Downloader::doDownload() { QString link =... . . . http = new QNetworkAccessManager(); connect( http, SIGNAL( finished( QNetworkReply * ) ), this, SLOT( replyFinished( QNetworkReply * ) ) ); http->get( QNetworkRequest( QUrl( link ) ) ); }
I tu ramowy kod SLOTa 'replyFinished': void Downloader::replyFinished( QNetworkReply * reply ) { if( reply->error() ) { qDebug() << "ERROR!"; qDebug() << reply->errorString(); } else { QString data = reply->readAll(); } doDownload(); }
|
|
sajmon |
» 2015-01-01 13:33:46 network manager działa w osobnym wątku niż gui więc wywołując http = new QNetworkAccessManager(); za każdym razem tworzysz nowy wątek. Spróbuj wywołać to raz na początku. Myślę, że powinno działać, ale głowy nie daję bo nigdy się tym nie bawiłem :P |
|
Harrel Temat założony przez niniejszego użytkownika |
» 2015-01-04 20:00:03 Sorki za tak późną odpowiedź, ale ostatnio jakoś nie bywałem zbyt często online. Jak najbardziej miałeś rację i przesunięcie instrukcji 'http = new QNetworkAccessManager();' do konstruktora rozwiązało problem, chociaż wygenerowało to tuzin innych błędów - jednak byłem w stanie się z nimi uporać i już wszystko gra. Dzięki wielkie! |
|
« 1 » |