Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод из дочернего потока в основной, QThread&&QProcess 
V
    Опции темы
Faustle
Дата 2.5.2010, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.4.2010

Репутация: нет
Всего: нет



Всем добрый день.
Ситуация такая - есть GUI-приложение, в котором по нажатии на кнопку создается дочерний поток, в котором запускается процесс (например команда uname). Проблема заключается в том, как передать вывод консоли из дочернего потока в основной. Насколько я понял, это надо делать с помощью сингала-слота, но похоже что-то я делаю не так.

сам проект

Подскажите, что в нем не так. Предполагаю, что дело в ф-ции setOutput, но не уверен. Сам поток создается вроде нормально, единственно отладчик говорит:
Цитата

QThread: Destroyed while thread is still running

Но подозреваю, что это из-за того, что процесс (команда uname) завершается, а поток корректно не завершается.

Заранее спасибо.
PM MAIL   Вверх
borisbn
Дата 2.5.2010, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



У тебя экземпляр класса ServerThread создаётся на стеке в функции on_pushButton_clicked. Удаляется он при выходе из этой функции, при этом его никто не останавливает и не дожидается его завершения.
переделай примерно так:

mainwindow.h:
Код

class ServerThread;

class MainWindow : public QMainWindow
{ 
...
    ServerThread * m_serverThread;
...
};


mainwindow.cpp:
Код

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{
        m_serverThread = new ServerThread();
        connect( m_serverThread, SIGNAL( updateOutput( QString ) ), this, SLOT( setOutput( QString ) ) );

        ui->setupUi( this );
}

MainWindow::~MainWindow()
{
    m_serverThread->exit();
    m_serverThread->wait();
}

 void MainWindow::on_pushButton_clicked()
{
    m_serverThread->start();
}



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Faustle
Дата 2.5.2010, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.4.2010

Репутация: нет
Всего: нет



borisbn, большое спасибо за ответ.
Действительно, поставив создание потока на обработчик кнопки, я не учел то, что он не останется по выходу из функции.

Я попробовал воспользоваться Вашим советом, ошибки "QThread: Destroyed while thread is still running" исчезли, но программа продолжает вылетать. Радует только то, что поставив бряк на функцию вывода, я увидел, что данные в QByteArray все-таки появились, раньше их там не было.
Саму же причину вылета пока понять не удалось.
PM MAIL   Вверх
Faustle
Дата 2.5.2010, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 18.4.2010

Репутация: нет
Всего: нет



Проблема решена, тема закрыта.
Я, дурак, обращался к несуществующему объекту process.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0767 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.