Имеется вот такой процесс
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()?