Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: dmitriym от Март 24, 2014, 16:22



Название: Окончание вывода в stdout
Отправлено: dmitriym от Март 24, 2014, 16:22
Как определить, что дочерний поток окончил вывод в stdout? Многострочное сообщение может быть очень велико, больше буфера, что, как я понимаю, выльется в то, что QProcess::waitForReadyRead() будет возвращать true несколько раз. Думаю использовать или таймаут, или текстовый признак окончания ввода. Имеются ли другие способы решения проблемы?


Название: Re: Окончание вывода в stdout
Отправлено: Alex Custov от Март 24, 2014, 22:11
открой кран и попробуй определить когда закончится вода ;D Поток открыт всё время работы программы, следовательно нужно либо использовать специальный текст, который будет сигнализировать о конце необходимых данных (то что ты и сам уже понял), либо ждать завершения программы (перекрыли воду).


Название: Re: Окончание вывода в stdout
Отправлено: dmitriym от Март 25, 2014, 09:22
При работе выводе на консоль, консоль понимает, что окончился вывод в stdout и началась ожидание ввода в stdin. Это в случае реализации "вопрос-ответ". Как консоль узнает, что дочерний процесс перешел в режим ожидания из stdin?


Название: Re: Окончание вывода в stdout
Отправлено: OKTA от Март 25, 2014, 09:34
Что значит понимает? stdin & stdout это потоки ввода-вывода. Когда хочешь читаешь, когда хочешь - записываешь. Или вы чего-то не понимаете или же дайте хоть пример какой-нибудь, где консоль пытается что-то понять  :D

А вообще можно использовать семафор или мьютекс!