Russian Qt Forum
Май 07, 2024, 02:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 68 69 [70]
1036  Qt / Работа с сетью / Re: QNetworkAccessManager и QThread : Июнь 25, 2009, 19:46
Уменя Qt 4.5.0 MinGW или gcc Windows Vista падает с такой ошибкой
Код:
C:\threadDownload4\debug>threadDownload5.exe http://127.0.0.1/AdobePhotoshopCS4.
rar
32768
32768
0
32768
32768
ASSERT: "d->ref == 1" in file tools\qlistdata.cpp, line 123

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

или просто молча, ещё под OpenSUSE 11.1 собирал падает с ошибкой сигментирования.

может Qt обновить...
1037  Qt / Работа с сетью / QNetworkAccessManager и QThread : Июнь 25, 2009, 16:20
Подскажите пожалуйста как их подружить, если я организовываю скачивание в главном потоке то всё отлично, если пытаюсь сделать закачку в вторичном потоке то всё плохо вот исходник

Код:
#include <QtCore/QCoreApplication>

#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QDebug>
#include <QFile>
#include <QThread>


#define USAGE QT_TRANSLATE_NOOP("threadDownload::main", "usage: %s <link> <file name>")

class ThreadHttpDownload : public QThread
{
    Q_OBJECT

    public:
        ThreadHttpDownload(QObject *parent,QString link);

        QNetworkReply *reply;
        QFile file;

        QString link;
        void run();

    private:

    private slots:
        void readyRead();
        void replyFinished(QNetworkReply*);
};

ThreadHttpDownload::ThreadHttpDownload(QObject *parent,QString _link)
        :QThread(parent)
{
     link = _link;
}

void ThreadHttpDownload::run()
{

    file.setFileName("download.file");
    file.open(QIODevice::WriteOnly);

     QNetworkRequest request;  // Формируем запрос
     request.setUrl(QUrl(link));


     QNetworkAccessManager manager;
     manager.moveToThread(this);

     reply = manager.get(request); //Отправляем запрос
     reply->moveToThread(this);

     connect(&manager, SIGNAL(finished(QNetworkReply*)),
         this, SLOT(replyFinished(QNetworkReply*)));
     connect(reply,SIGNAL(readyRead()),this,SLOT(readyRead()));

     exec();
}


void ThreadHttpDownload::readyRead()
{
        qDebug() << reply->size();
        file.write(reply->readAll());
}

void ThreadHttpDownload::replyFinished(QNetworkReply *reply)
{
    if (reply->error())
    {
        qDebug() << "error download" << reply->errorString();
        QCoreApplication::quit();
    }else
    {
        qDebug() << "download complete";
        file.close();
        QCoreApplication::quit();
    }
}

int main(int argc, char *argv[])
{
    if (argc < 2)
    {
        qDebug(USAGE, argv[0]);
        return 0;
    }

    QCoreApplication a(argc, argv);

        ThreadHttpDownload *th = new ThreadHttpDownload(0,argv[1]);
        th->start();

    return a.exec();
}

#include <main.moc>


вот в этом куске всё падает

file.write(reply->readAll());

где я туплю Непонимающий, уже несколько дней разобраться немогу Улыбающийся
Страниц: 1 ... 68 69 [70]

Страница сгенерирована за 0.053 секунд. Запросов: 23.