![]() |
|
|
![]()
|
|
| leshiysoft |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 3.8.2007 Репутация: нет Всего: нет |
Доброго всем времени суток! Суть вопроса проста:
Пытаюсь разобраться с QProcess. Использую QProcess для запуска консольного приложения. Для чтения того, что пишет запускаемое консольное приложение использую сигнал readyReadStandardOutput. Вроде всё просто и понятно. Если консольное приложение только пишет в стандартный поток вывода и завершается, то после завершения срабатывает readyReadStandardOutput, если ещё и читает строку и не завершается пока не прочтет, то сигнал readyReadStandardOutput не случается никогда. Заранее спасибо за любую помощь. Код выглядит так: mclass.h
mclass.cpp
|
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
leshiysoft, а ты пробовал писать в стандартный ввод процесса?
|
|||
|
||||
| leshiysoft |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 3.8.2007 Репутация: нет Всего: нет |
Я пробовал и так как приведено в коде выше, и сразу после запуска процесса писать в него - результат не меняется. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
leshiysoft, а символ конца строки (\n) ты не забывал отправить?
|
|||
|
||||
| leshiysoft |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 3.8.2007 Репутация: нет Всего: нет |
Да действительно, забывал. Но почему я не получал те строки, которые отправлял процесс "run" до ожидания ввода? То есть получается, что я получаю строки вывода запускаемого процесса только после его завершения. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Ты забываешь про буферизацию. Весь вывод буферизуется для ускорения. Почитай про fflush и std::flush.
Более того, некоторые программы не завершаются, пока не придет сигнал закрытия входного потока. |
|||
|
||||
| leshiysoft |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 3.8.2007 Репутация: нет Всего: нет |
Не забываю )) fflush и std::flush работает на очищение выходного буфера, а у меня не работает входное направление. Дело в том, что моя программа подразумевает получение нескольких строк от порожденного процесса прежде чем запишет что-то свое. Но пока моя программа не запишет что-то свое, первые строки, которые порожденная программа выбрасывает на стандартый выход, я получить не могу (почему-то). Замкнутый круг. Кстати если порожденный процесс запустить вручную в консоли - всё работает так как надо: она пишет пару строк, потом я пишу строку для неё, и она дописав "финальную реплику" благополучно ложится. |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |