crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3  
Ответить в данную темуНачать новую тему
> Exec threads etc...
Константин
  опции профиля:
сообщение 18.2.2009, 18:02
Сообщение #21


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 9.2.2009
Пользователь №: 539

Спасибо сказали: 15 раз(а)




Репутация:   1  


Цитата(Гость_me_* @ 18.2.2009, 17:41) *
Всем спасибо!

жми соответствующую кнопочку :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_me_*
сообщение 2.3.2009, 16:35
Сообщение #22





Гости








    


В продолжение этой темы.. как-то всё не доходили руки сесть за всё это, но как наконец-то сел начались новые непонимания..


Вначале код:
FtpThread.h:
#include "FtpThread.h"

void FtpThread::run()
{
    // определение и инициализация соединения
    ftpConnection = new QFtp();
    connect(ftpConnection, SIGNAL(commandFinished(int, bool)), this, SLOT(commandManage(int, bool)), Qt::DirectConnection);
    ftpConnection->connectToHost(this->server);
    qDebug() << "Thread" << QThread::currentThreadId();
    exec();
    }

FtpThread::FtpThread(QString *server, QString *login, QString *pass)
{
    if (server == NULL)
;                    //  пока без этого..
    else
        this->server = *server;
    if (login == NULL)
        this->login="anonymous";
    else
        this->login = *login;
    if (pass == NULL)
        this->pass = "password";
    else
        this->pass = *pass;
    ftpConnection = NULL;
}
void FtpThread::commandManage(int command, bool isError)
{
    if (isError == true)
    {
        qDebug() << "Error:" << command << ftpConnection->errorString();
        return;
    }
    else
    {
        switch(command)
        {
            case 1:        // connectToHost прошёл успешно.. логинимся
                qDebug() << "Loging 1" << QThread::currentThreadId();
                ftpConnection->login(this->login, this->pass);
                return;
            case 2:
                qDebug() << "Logged In 2" << QThread::currentThreadId();
                ftpConnection->close();
                return;
            case 3:
                qDebug() << "Closed 3" << QThread::currentThreadId();
                quit();
                return;
            default:
                qDebug() << "OPPA!!" << command << QThread::currentThreadId();
                return;
        }
    }

}

FtpThread.cpp
#ifndef FTPTHREAD_H_
#define FTPTHREAD_H_

#include <QtNetwork>
#include <QCoreApplication>
#include <QQueue>

// Тип загрузки. С сервера или на сервер.
enum LoadDirection {TO_THE_SERVER, FROM_THE_SERVER};

class FtpThread : public QThread
{
    Q_OBJECT

public:
    FtpThread(QString *server = NULL , QString *name = NULL, QString *pass = NULL);

public slots:
    void commandManage(int, bool);

protected:
    void run();

private:
    // настройки подключения к серверу
    QString server;
    QString login;
    QString pass;
    LoadDirection load;

    // (up/down)load settings
    QString from;
    QString to;

    // Ftp соединение.
    QFtp *ftpConnection;

    // Задания
    QQueue<QString> tasks;
};
#endif /* FTPTHREAD_H_ */

main.cpp
#include <QtCore>
#include <QtNetwork>
#include <QCoreApplication>
#include "FtpThread.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString host = "ftp.freebsd.org";
    QString user = "anonymous";
    QString pass = "pass";
    QString dir  = "/pub/FreeBSD/";

    qDebug() << "Main thread" << QThread::currentThreadId();

    FtpThread ftpWorker(&host);
    FtpThread ftpWorker2(&host);
    ftpWorker.start();
    ftpWorker2.start();
    //ftpWorker.wait();
//  qDebug() << QThread::currentThreadId() << "After Wait";
    return a.exec();
}


Вывод в консоль=(((

Main thread 3071719120 
Thread           3070524304 QFtp(0x80564b0)
Thread           3053738896 QFtp(0x805d8c0)
Loging 1        3070524304 QFtp(0x80564b0)
Logged In 2  3053738896 QFtp(0x805d8c0)
OPPA!! 4       3053738896 QFtp(0x805d8c0)
Closed 3       3070524304 QFtp(0x80564b0)


Толи на оба QFtp даётся общая последовательность ID команд.. толи не знаю. Если это так то очевидно лучше использовать
currentCommand () + слоты на запуск команды и конец команды...? Что я делаю не так??
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 2.3.2009, 17:47
Сообщение #23


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Рекомендация по поводу использования NULL: http://www.prog.org.ru/topic_7458_0.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_me_*
сообщение 2.3.2009, 17:49
Сообщение #24





Гости








    


Забыл вырезать из вывода QFtp(0x80564b0) - эт я решил в какой=то момент посмотреть на адреса объектов QFtp для каждого потока...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_me_*
сообщение 2.3.2009, 18:20
Сообщение #25





Гости








    


Последовательность ID действительно одна для всех объектов QFtp ((
Прийдётся через currentThreadId и дальнейший анализ что за команда выполняется.. меня вот кстати всегда мучал вопрос а не может ли случиться так,
что если мы ловим сигнал от commandStarted и в слоте вызываем currentThreadId не может ли она хотя бы теоретически вернуть другую команду...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 8:38