crossplatform.ru

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

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> QThread&QProcess
igor_bogomolov
  опции профиля:
сообщение 2.5.2010, 19:49
Сообщение #11


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Цитата(Litkevich Yuriy @ 2.5.2010, 20:40) *
по идее Qt сама выбирает тип соединения и указывать явно не нужно.
Иногда нужно. MainWindow и ServerThread созданы с контексте одного потока поэтому м/у ниму тип соединения будет Qt::DirectConnection

Можно в принципе воспользоваться moveToThread, тогда тип соединения автоматически установится правильным
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Azazello
  опции профиля:
сообщение 2.5.2010, 20:16
Сообщение #12


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 17.4.2010
Пользователь №: 1635

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




Репутация:   0  


igor_bogomolov, Litkevich Yuriy, большое спасибо за ответы.
Игорь, я попробовал сделать как Вы посоветовали, но, к сожалению, и это не помогло. Возможно, я просто что-то упустил, какую-нибудь мелоч. Выкладываю весь проект, может это внесет ясность, а то я уже и не знаю, что можно сделать. Перечитал уже сотню другую страниц форумов, ассистента и книжек, а результата никакого...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 2.5.2010, 20:31
Сообщение #13


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Блин, слепой я. Ты же ServerThread на стеке создаёшь. После исполнения функции он у тебя удаляется.
Сделай так
void MainWindow::on_pushButton_clicked()
{
    ServerThread *th = new ServerThread;
    connect(th,SIGNAL(updateOutput(QString)),this,SLOT(setOutput(QString)));
    th->start();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Azazello
  опции профиля:
сообщение 2.5.2010, 21:06
Сообщение #14


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 17.4.2010
Пользователь №: 1635

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




Репутация:   0  


Действительно, поставив создание потока на обработчик кнопки, я не учел то, что он не останется по выходу из функции. Теперь ясно, что означало "QThread: Destroyed while thread is still running".
Отладчиком стали видится данные вывода в QByteArray, но упорно продолжает вылетать с unexpectedly finished... И трассировать что-то нормально не выходит, не понятно ничего :wacko:

Я уже и, как советовали, выность ф-цию наружу пробовал,
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{
        m_serverThread = new ServerThread();
        connect( m_serverThread, SIGNAL( updateOutput( QString ) ), this, SLOT( setOutput( QString ) ) );
        ui->setupUi( this );
}

объявляя класс в mainwindow.h и инициируя запуск в обработчике кнопки:
m_serverThread->start();

и все равно результат тот же :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 2.5.2010, 21:27
Сообщение #15


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Держи тестовый пример. Он правда для Windows, поэтому если ты делаешь для Linux строчки
    QTextCodec::setCodecForTr(QTextCodec::codecForName("system"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("IBM 866"));
могут быть лишними, просто закоментируй


---Добавлено--------------
Кратко, проблема просто в невнимательности. Ты делаешь доступ к несуществующему объекту
QByteArray bytes = process->readAllStandardOutput();
Объекта process у тебя не существует, т.к. ты его не создал. То что ты создаешь в run
void ServerThread::run()
{
    QProcess process;
это совершенно другой объект доступа до которого ты не имеешь.

P.S. Мой пример тоже не без недостатков, но для демонстрации сойдёт :)


Прикрепленные файлы
Прикрепленный файл  test.zip ( 3,47 килобайт ) Кол-во скачиваний: 187
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Azazello
  опции профиля:
сообщение 2.5.2010, 21:56
Сообщение #16


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 17.4.2010
Пользователь №: 1635

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




Репутация:   0  


Цитата(igor_bogomolov @ 2.5.2010, 22:27) *
Кратко, проблема просто в невнимательности.

И почему я так и думал :) Это всегда было моей основной проблемой.

Игорь, спасибо тебе громадное. И не только за пример, но и за все ответы, которые мне очень помогли не просто тупо переписать, а именно понять свою ошибку. Мой самый искренний респект тебе!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 24.11.2024, 10:28