crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Помогите пожалуйста наладить перехват stdout консольного приложения.
Gordey
  опции профиля:
сообщение 1.7.2010, 20:48
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 29.1.2009
Пользователь №: 516

Спасибо сказали: 1 раз(а)




Репутация:   0  


Всем привет.
Помогите пожалуйста наладить перехват stdout консольного приложения.

Использую QT 4.6.3 и Microsoft Visual Studio 2008.

Задача: из Qt GUI запустить консольное приложение, перехватить его стандартный поток ввода/вывода и вывести перехваченные данные в элемент QTextEdit.

Консольное приложение в цикле валит в поток вывода строки
Value: 1
Value: 2
Value: 3
и т.д.

#include <iostream>

int main(int argc, char* argv[])
{
    for(int i =0; i != 1000000; ++i)
        std::cout << "Value: " << i << std::endl;

    return 0;
}


В Qt GUI при нажатии на кнопку создается отдельный поток.

process = new QProcess;
process->setProcessChannelMode(QProcess::MergedChannels);
connect(process, SIGNAL(readyReadStandardOutput()), this, SLOT(output()));
process->start("test_console.exe");
exec();

При создании потока запускаем процесс с консольным приложением. При получении сигнала readyReadStandardOutput() отправляем считанные данные родительскому приложению.

void ServerThread::output()
{
    QByteArray bytes = process->readAllStandardOutput();
    emit updateOutput(bytes);
}

В Qt GUI получаем посылку с данными и выводим ее в QTextEdit.

void MainWindow::setOutput(const QString &msg)
{
    ui->textEdit->insertPlainText(msg);
}

Проблема в том, что при перехвате потока ввода/вывода и выводе данных в QTextEdit происходит залипание Qt GUI. То есть я практически ничего не могу сделать с родительским окном.
Как можно решить данную проблему? Как избавиться от залипания QT окна? При решении проблемы изменять код консольного приложения нельзя , нужно решить задачу другими способами.

PS: Прикладываю тестовые проекты приложений. Так как проекты тестовые строго не судите за код… Обработки завершения процессов и потоков я не делал. Для распаковки архива с примерами удалите ".txt".

Сообщение отредактировал Litkevich Yuriy - 1.7.2010, 21:39
Причина редактирования: пользуйся тэгом code

Прикрепленные файлы
Прикрепленный файл  test.rar.txt ( 40.41 килобайт ) Кол-во скачиваний: 187
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 2.7.2010, 11:50
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Gordey @ 2.7.2010, 10:08) *
Но такой вариант мне не подходит так как консольное приложения я изменить не могу.
а зачем ты в него вообще полез, если оно неизменяемое? Про него и забудь.

Видимо для TextEdit это слишком большой темп поступления данных. Можно попробовать буферировать его, хотя я сомневаюсь, что это поможет. Скорее всего придётся менять сам виджет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Gordey   Помогите пожалуйста наладить перехват stdout консольного приложения.   1.7.2010, 20:48
- - Gordey   Дополнительно выложил файлы проектов на webfile.ru...   1.7.2010, 21:26
- - Litkevich Yuriy   читай по форуму темы типа "потоки и сигналы...   1.7.2010, 21:44
|- - Gordey   Цитата(Litkevich Yuriy @ 1.7.2010, 22:44)...   1.7.2010, 22:03
- - Litkevich Yuriy   яб для начала, отправлял бы всё в отладочную консо...   1.7.2010, 22:28
|- - Gordey   Цитата(Litkevich Yuriy @ 1.7.2010, 23:28)...   2.7.2010, 6:08
- - Litkevich Yuriy   Цитата(Gordey @ 2.7.2010, 10:08) Но такой...   2.7.2010, 11:50
- - Gordey   Цитата(Litkevich Yuriy @ 2.7.2010, 12:50)...   2.7.2010, 15:31
- - Litkevich Yuriy   Цитата(Gordey @ 2.7.2010, 19:31) А что зн...   2.7.2010, 16:22
- - Gordey   Цитата(Litkevich Yuriy @ 2.7.2010, 17:22)...   2.7.2010, 17:29
- - Gordey   Неужто здесь на форуме нет гуру способных помочь?   4.7.2010, 8:11
- - Алексей1153   Цитата(Gordey @ 2.7.2010, 9:08) Если я ко...   4.7.2010, 9:34
- - inviZ   Gordey, может попробуешь QPlainTextEdit? Он попрощ...   4.7.2010, 13:13
|- - Gordey   Цитата(inviZ @ 4.7.2010, 14:13) Gordey, м...   4.7.2010, 14:35
- - Litkevich Yuriy   я склоняюсь к тому, что при большом темпе поступле...   4.7.2010, 14:55
- - Gordey   Цитата(Litkevich Yuriy @ 4.7.2010, 15:55)...   4.7.2010, 18:54


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.4.2024, 2:19