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

[Qt]Niepożądane tworzenie się wielu wątków?

Ostatnio zmodyfikowano 2015-01-04 20:00
Autor Wiadomość
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:
C/C++
void Downloader::doDownload()
{
    QString link =...//wczytywanie adresu strony do zmiennej link
    .
    .
    .
   
   
    http = new QNetworkAccessManager();
   
    connect( http, SIGNAL( finished( QNetworkReply * ) ), this, SLOT( replyFinished( QNetworkReply * ) ) );
   
    http->get( QNetworkRequest( QUrl( link ) ) );
}

I tu ramowy kod SLOTa 'replyFinished':
C/C++
void Downloader::replyFinished( QNetworkReply * reply )
{
    if( reply->error() )
    {
        qDebug() << "ERROR!";
        qDebug() << reply->errorString();
    }
    else
    {
        QString data = reply->readAll();
       
       
    }
    doDownload();
}
P-123762
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
P-123781
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!
P-124125
« 1 »
  Strona 1 z 1