Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: rizzoli от Июль 18, 2014, 08:06



Название: Как проверить стандартный ввод
Отправлено: rizzoli от Июль 18, 2014, 08:06
Есть два процесса: один запускает другой и периодически посылает туда команды.
Как проверить из второго процесса, что стандартный ввод пуст?


Название: Re: Как проверить стандартный ввод
Отправлено: OKTA от Июль 18, 2014, 09:41
bool QIODevice::atEnd () const [virtual] не помогает?


Название: Re: Как проверить стандартный ввод
Отправлено: rizzoli от Июль 21, 2014, 11:14
Я хотел что-то типа такого, но не работает - atEnd() всегда возвращает false:
Код:
#include <QTextStream>

int main(int, char **)
{
    QTextStream qstdin(stdin, QIODevice::ReadOnly);
    QTextStream qstdout(stdout, QIODevice::WriteOnly);

    for(quint32 i = 0; i < 999999999; ++i)
    {
        qstdout << i;

        if(!qstdin.atEnd())
        {
            if(qstdin.readLine() == "Stop\n")
            {
                qstdout << "Stopped";
                break;
            }
        }
    }

    return 0;
}


Название: Re: Как проверить стандартный ввод
Отправлено: Fat-Zer от Июль 21, 2014, 12:39
rizzoli, «по-простому» сделать не возможно... так или иначе придётся вешаться на сигнал QIODevice::readyRead().


Название: Re: Как проверить стандартный ввод
Отправлено: rizzoli от Июль 22, 2014, 07:25
Вот нашел ссылку: http://stackoverflow.com/questions/7457990/child-process-stdin-doesnt-get-data-sent-by-parent-process (http://stackoverflow.com/questions/7457990/child-process-stdin-doesnt-get-data-sent-by-parent-process).