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

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Сигналы в gui поток из дочернего  (Прочитано 19142 раз)
ритт
Гость
« Ответ #15 : Апрель 28, 2009, 18:48 »

про очередь QFtp я не забыл. десяток файлов я бы ещё согласился запустить одновременно, сотню - уже нет.
Записан
roginovicci
Гость
« Ответ #16 : Апрель 28, 2009, 19:15 »

А вот кстати интересно как эту функцию отключить? Что надо в CMakeList.txt прописать?
Аналогичная проблема.

вроде надо поиграть с ключами gcc:  -mwindows  -mconsole

про очередь QFtp я не забыл. десяток файлов я бы ещё согласился запустить одновременно, сотню - уже нет.
Согласен. Спасибо за идею. Надеюсь, я тебя правильно понял. Попробую учесть все замечания.

Записан
Sergeich
Гость
« Ответ #17 : Апрель 29, 2009, 23:53 »

Кстати, о птичках:
В нашем Родном и Незабвенном пишут
Цитировать
This class provides a direct interface to FTP that allows you to have more control over the requests. However, for new applications, it is recommended to use QNetworkAccessManager and QNetworkReply, as those classes possess a simpler, yet more powerful API.
Записан
roginovicci
Гость
« Ответ #18 : Апрель 30, 2009, 15:55 »

Во как! Только я начал в QFtp въезжать...
И все таки нифига не коннектится из нового треда к фтп серверу, полдня потратил.

Код:
class FtpWorker :  public QThread
{
    Q_OBJECT
private:
    QFtp *ftp;
private slots:
    void ftpCommandFinished(int commandId, bool error);
    void ftpCommandStarted(int commandId);
};
FtpWorker::FtpWorker(FtpDialog *parent, QUrl *p_url): QThread(parent)
{
    ftp=new QFtp();
    connect(ftp, SIGNAL(commandFinished(int, bool)),
            this, SLOT(ftpCommandFinished(int, bool)));
    connect(ftp, SIGNAL(commandStarted(int)),
            this, SLOT(ftpCommandStarted(int)));
}
void FtpWorker::run(){
        ftp->connectToHost(p_url->host(), p_url->port());
        ftp->login();
}
void FtpWorker::ftpCommandStarted(int commandId)
{
    printf("ftpCommandStarted, cmd is: %d \n",ftp->currentCommand());
    if (ftp->currentCommand() == QFtp::Login)
        printf("LoginStarted\n");
}
void FtpWorker::ftpCommandFinished(int commandId, bool error)
{
    printf("ftpCommandFinished command is %d\n",ftp->currentCommand());
    if (ftp->currentCommand() == QFtp::ConnectToHost) {
        if (error) {
            printf("ftpCommandFinished, error occured while connecting\n");
            return;
        }
        printf("Connected to host\n");
        return;
    }
    if (ftp->currentCommand() == QFtp::Login){
        printf("Got connected");
        return;
    }

}
запускается из основного потока путем создания объекта и вызова метода start()

В консоли глухо. Хотя и бывают такие чудеса - один раз из 20  конектится...

p.s. Мне показалось, что QNetworkAccessManager больше для http подходит, или не?
« Последнее редактирование: Апрель 30, 2009, 16:19 от roginovicci » Записан
Sergeich
Гость
« Ответ #19 : Апрель 30, 2009, 21:20 »

А где вызов exec() в void FtpWorker::run()?
Цитировать
p.s. Мне показалось, что QNetworkAccessManager больше для http подходит, или не?
Если нет специфичной именно для FTP задачи, то лучше его.
Записан
ритт
Гость
« Ответ #20 : Апрель 30, 2009, 23:12 »

экзек не нужен Улыбающийся
roginovicci, зачем поток для фтп? почему не читаешь документацию? и в чём экономия QUrl* в сравнении с const QUrl& ?
Записан
roginovicci
Гость
« Ответ #21 : Май 01, 2009, 09:59 »

Поток для фтп исключительно в качестве эксперимента. Или все таки нельзя работать с фтп из дочернего потока?
« Последнее редактирование: Май 01, 2009, 10:38 от roginovicci » Записан
ритт
Гость
« Ответ #22 : Май 01, 2009, 11:07 »

да можно же!
петлю в потоке создай. сейчас у тебя поток завершается сразу после старта...
Записан
roginovicci
Гость
« Ответ #23 : Май 01, 2009, 14:35 »

Хм, не понимаю. Вообще-то поток живет. Я создавал объект QTimer который вызывает метод аля ping, который печатает в консоль сообщение о состоянии каждые 10 секунд. Сообщения исправно сыпятся. Надо внимательнее значит посмотреть. Спасибо, Константин за конструктивные ответы!
Записан
ритт
Гость
« Ответ #24 : Май 01, 2009, 15:07 »

единственная причина, по которой "сообщения исправно сыпятся" - утечка памяти Улыбающийся
это я заметил сразу, но промолчал...теперь вот и оно стало актуальным.
посмотри на собственный код: ftp=new QFtp();
а где этот объект уничтожается? вот он и живёт себе, посылает мессаги тебе в консоль...а поток дохлый

открой документацию, найди QThread и почитай про секцию методы run/start
Записан
Sergeich
Гость
« Ответ #25 : Май 01, 2009, 21:17 »

Ахренеть, дайте две.
экзек не нужен Улыбающийся
Это стеб как я понял Улыбающийся
Цитировать
Хм, не понимаю. Вообще-то поток живет.
Вообще-то поток живет пока он не закончится, а у тебя
Код:
void FtpWorker::run(){
        ftp->connectToHost(p_url->host(), p_url->port());
        ftp->login();
}
он вызывает пару методов и благополучно завершается.
Записан
ритт
Гость
« Ответ #26 : Май 01, 2009, 22:17 »

экзек не нужен Улыбающийся
Это стеб как я понял Улыбающийся
да, я это писал с саркастической ухмылкой...просто смайла такого нет Улыбающийся
Записан
SASA
Гость
« Ответ #27 : Май 27, 2009, 10:14 »

экзек не нужен Улыбающийся
Это стеб как я понял Улыбающийся
да, я это писал с саркастической ухмылкой...просто смайла такого нет Улыбающийся
Вопрос не в тему. А зачем нужен экзек? Писал много потоков, обходился только циклами в ране.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #28 : Май 27, 2009, 11:59 »

Вопрос не в тему. А зачем нужен экзек? Писал много потоков, обходился только циклами в ране.

Цитировать
int QThread::exec ()   [protected]
Enters the event loop and waits until exit() is called, returning the value that was passed to exit(). The value returned is 0 if exit() is called via quit().
It is necessary to call this function to start event handling.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
SASA
Гость
« Ответ #29 : Май 29, 2009, 18:16 »

А зачем нужен этот поток разбора сообщений? И как им пользоваться?
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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