Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: ammaximus от Апрель 29, 2014, 08:49



Название: QProcess stdin мусор ondetach
Отправлено: 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()?


Название: Re: QProcess stdin мусор ondetach
Отправлено: Coffeesomtum от Октябрь 20, 2014, 13:45
Можете ли вы научить меня. Я был бы очень много.


Название: Re: QProcess stdin мусор ondetach
Отправлено: Bepec от Октябрь 20, 2014, 15:38
Ну при такой постановке что у нас творится - мы берём строку из stdin, не проверяем её на пустоту и отсылаем сигнал. При чем без разницы, пришло нам что-то или не пришло.

Как вариант - ставьте проверку.