| Название: QProcess или QThread [НОВЫЙ ВОПРОС] Отправлено: helga1917 от Сентября 04, 2013, 12:05 Здравствуйте!  нужно реализовать такую задачу: есть процесс, который периодически присылает в основную программу данные по каналу вывода, а основная программа, как только они пришли принимает и делает свои манипуляции. (Однопоточный вариант) Но тут встает проблема: основная программа считывает сразу все данные из канала вывода по завершению работы процесса. Есть ли способ, периодически считывать и обрабатывать данные? Или нужно разбивать программу на два потока? Название: Re: QProcess или QThread Отправлено: mutineer от Сентября 04, 2013, 12:36 основная программа считывает сразу все данные из канала вывода по завершению работы процесса. Есть ли способ, периодически считывать и обрабатывать данные? Цитировать void QProcess::readyReadStandardOutput () [signal] Название: Re: QProcess или QThread Отправлено: helga1917 от Сентября 04, 2013, 12:45 да, я использую эту функцию. Проблема в том что процесс сразу выполняется, и присылает сразу все данные из канала вывода, а не порционно. Название: Re: QProcess или QThread Отправлено: mutineer от Сентября 04, 2013, 12:46 Значит у тебя такой быстрый процесс, что порционность просто не успевает происходить Название: Re: QProcess или QThread Отправлено: helga1917 от Сентября 04, 2013, 12:55 допустим это процесс: Код: int main() это основная программа: Код: Window::Window() Название: Re: QProcess или QThread Отправлено: helga1917 от Сентября 04, 2013, 12:58 Цитировать Значит у тебя такой быстрый процесс, что порционность просто не успевает происходитьЗначит надо в процессе между отправкой данных сделать задержку? Название: Re: QProcess или QThread Отправлено: mutineer от Сентября 04, 2013, 13:00 А зачем ты делаешь process->waitForFinished(); ? С этой строкой пока процесс не закончится, твоя программа не сможет ничего сделать. В том числе и прочитать вывод Название: Re: QProcess или QThread Отправлено: helga1917 от Сентября 04, 2013, 13:04 убрала waitForFinished, тот же результат Название: Re: QProcess или QThread Отправлено: mutineer от Сентября 04, 2013, 13:07 А зачем тебе вообще порционность, если процесс выполняется так быстро? Название: Re: QProcess или QThread Отправлено: helga1917 от Сентября 04, 2013, 13:15 я пока не знаю как в реальности будет работать процесс, может также быстро, может медленней (это зависит от условий, которые пока не известны) это пока тестовый вариант Название: Re: QProcess или QThread Отправлено: mutineer от Сентября 04, 2013, 13:18 Ну так сделай чтобы он работал медленно, и тогда уже посмотри будет ли порциями читать Название: Re: QProcess или QThread Отправлено: helga1917 от Сентября 04, 2013, 13:22 вставила между порциями данных цикл (int i=0; i<1000000000; i++){} и данные стали приходить порциями  :)  спасибо! Название: Re: QProcess или QThread Отправлено: gil9red от Сентября 04, 2013, 14:05 ну зачем же так извращаться? ) сделайте бесконечный цикл (while(true) или for(;;)) Название: Re: QProcess или QThread Отправлено: helga1917 от Сентября 04, 2013, 14:51 если использовать бесконечный цикл, то программа пошлет одну порцию данных, а потом будет выполнять бесконечный цикл и все на этом Название: Re: QProcess или QThread Отправлено: helga1917 от Сентября 04, 2013, 15:29 у меня теперь новая проблема, делаю все тоже самое, только порции данных должны процессом отправляться при нажатии на кнопку. Но в основную программу ничего не приходит. подскажите почему? Код: Window::Window{программа: Код: Window::Window() Название: Re: QProcess или QThread Отправлено: mutineer от Сентября 04, 2013, 15:50 убери waitForReadyRead Название: Re: QProcess или QThread [НОВЫЙ ВОПРОС] Отправлено: helga1917 от Сентября 04, 2013, 15:53 так пробовала, тоже самое   Название: Re: QProcess или QThread Отправлено: Kurles от Сентября 05, 2013, 12:19 вставила между порциями данных цикл (int i=0; i<1000000000; i++){} и данные стали приходить порциями  :) Интересное решение - пауза между данными будет зависеть от быстроты процессора ) спасибо! |