Название: 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++){} и данные стали приходить порциями :) Интересное решение - пауза между данными будет зависеть от быстроты процессора ) спасибо! |