QThread&QProcess |
Здравствуйте, гость ( Вход | Регистрация )
QThread&QProcess |
Azazello |
1.5.2010, 23:41
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 16 Регистрация: 17.4.2010 Пользователь №: 1635 Спасибо сказали: 0 раз(а) Репутация: 0 |
Всем привет
Подскажите пожалуйста, что не так в коде ниже, и как можно сделать вывод процесса, запущенного в отдельном потоке в textEdit (как я понял, надо сначала передавать данные в основной поток) Задача - запуск из GUI приложения процесса, в отдельном потоке и вывод полученной, в результате его выполнения, информации в textEdit. mainwindow.cpp
mainwindow.h
thread.cpp
thread.h
На данный момент при попытке компиляции, программа вылетает. Если трассировать вручную, то отладчик пишет:
|
|
|
Litkevich Yuriy |
2.5.2010, 1:00
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Cannot create children for a parent that is in a different thread. нельзя создавать дочерний объект, находящийся в другом, от родителя, потоке//как передать вывод из созданного потока в основной? в дополнительном потоке посылать сигнал. А в основном создать слот и соединить его с этим сигналом
|
|
|
Azazello |
2.5.2010, 1:11
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 16 Регистрация: 17.4.2010 Пользователь №: 1635 Спасибо сказали: 0 раз(а) Репутация: 0 |
нельзя создавать дочерний объект, находящийся в другом, от родителя, потоке Перевести-то я перевел, но только не понял, что этим мне хочет сказать компилятор... в дополнительном потоке посылать сигнал. А в основном создать слот и соединить его с этим сигналом Направление понял, буду пробовать. Спасибо. |
|
|
Litkevich Yuriy |
2.5.2010, 12:13
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Azazello |
2.5.2010, 13:29
Сообщение
#5
|
Студент Группа: Новичок Сообщений: 16 Регистрация: 17.4.2010 Пользователь №: 1635 Спасибо сказали: 0 раз(а) Репутация: 0 |
А, все, дошло ) Спасибо!
|
|
|
Azazello |
2.5.2010, 16:00
Сообщение
#6
|
Студент Группа: Новичок Сообщений: 16 Регистрация: 17.4.2010 Пользователь №: 1635 Спасибо сказали: 0 раз(а) Репутация: 0 |
Пытаюсь сделать вывод из дочернего потока в textEdit основного:
Добавил: mainwindow.cpp
mainwindow.h
Функцию run() переделал:
thread.cpp
thread.h
По нажатию на кнопку, прога вылетает. Я вот думаю, может процесс не успевает сделать вывод? Но ведь по идее для этого вызов идет через emit, или я что-то не правильно понимаю? |
|
|
Litkevich Yuriy |
2.5.2010, 17:49
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Azazello |
2.5.2010, 18:03
Сообщение
#8
|
Студент Группа: Новичок Сообщений: 16 Регистрация: 17.4.2010 Пользователь №: 1635 Спасибо сказали: 0 раз(а) Репутация: 0 |
у тебя слот не доступен для других объектов, он ЛИЧНЫЙ (private) данного класса. сделай его открытым (public) Юрий, спасибо за ответ. Но, к сожалению, ситуацию это не меняет. Я пробовал объявлять его в public slots. Поток создается, но после этого приложение вылетает с "The program has unexpectedly finished." Пробовал также запускать через отладчик, чтобы понять, в чем причина, но кроме того, что создается поток больше ничего не ясно... |
|
|
igor_bogomolov |
2.5.2010, 19:36
Сообщение
#9
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
На сколько я понимаю, setOutput(QString) будет вызван в дочернем потоке, а в этом слоте по всей видимости идет обращение к GUI. С GUI нельзя работать вне основного потока, поэтому и получаем вылет.
Попробуй сделать следущие изменения в коде
|
|
|
Litkevich Yuriy |
2.5.2010, 19:40
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Текстовая версия | Сейчас: 28.11.2024, 8:44 |