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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QProcess stdin мусор ondetach  (Прочитано 2421 раз)
ammaximus
Гость
« : Апрель 29, 2014, 08:49 »

Имеется вот такой процесс
Код:
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Receiver)
{
    ui->setupUi(this);

    reader = new ReadThread();
    reader->active = true;
    reader->start(QThread::NormalPriority);
    connect (reader, SIGNAL(newData(QString)), SLOT(appendNewData(QString)));

}

Widget::~Widget()
{
    delete ui;
    reader->active = false;
    sleep(1);
    if (reader->isRunning())
        reader->terminate();
}

void Widget::appendNewData(QString data)
{
    ui->txt->append(data);
}

void ReadThread::run()
{
    QTextStream stream(stdin);
    QString s;
    while(active){
        stream >> s;
        emit newData(s);
    }
}

Если запустить его из консоли, то все работает нормально. Если запустить его с помощью QProcess из другого процесса, то все работает нормально (если в конце посылать \n). Проблемы возникают если закрыть родителя - stdin забивается пустыми сообщениями и программа зависает. Тоже самое происходит, если пытаться запустить этот процесс сразу startDetach().

Что не так? не правильно читаю входной поток? и можно ли повиснуть onReadyRead, а не потоком читать? И как флашить не посылая \n в конце сообщения QProcess.write()?
Записан
Coffeesomtum
Гость
« Ответ #1 : Октябрь 20, 2014, 13:45 »

Можете ли вы научить меня. Я был бы очень много.
Записан
Bepec
Гость
« Ответ #2 : Октябрь 20, 2014, 15:38 »

Ну при такой постановке что у нас творится - мы берём строку из stdin, не проверяем её на пустоту и отсылаем сигнал. При чем без разницы, пришло нам что-то или не пришло.

Как вариант - ставьте проверку.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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