LINUX.ORG.RU

Qt и дочерний процесс


0

0

Такая проблема: есть приложение написанное с исользованием Qt (3.0), обычное окно (QDialog или QMainWindow - разницы нет) с QListView. Из класса этого окна запускается дочерний процесс(fork()). В нем крутится цикл чтения(из сокета или модема - не суть важно). И полученные данные нужно выводить в этот самый QListView. Не выводятся!!!! Почему? Доступ к нему как будто бы есть, ошибки не вылетает, но и item'ы не добавляются. Пробовал создавать экземпляр QThread и там деалть все то же самое(передавал в QThread указатель на owner'а QListView) - результат нулевой. Помогите плз.

Насчет fork () не знаю (ведь это же полная копия сегментов запущенной программы и между ними надо налаживать каналы для связи), но с QThread должно работать. Ты сделай чтобы просто QThread заполнял какой либо тебе нужный массив, а в ГлавномОкне например через Таймер выводи. Правда QMutex еще придеться использовать (для блокировки обращения к критическим ресурсам).

anonymous
()

это конечно хорошо. А без таких вещей нельзя обойтись? Сделать запись "напрямую"?

SnakePAN
() автор топика

А с какой стати они должны туда выводиться? Ты делаешь фок после того как у тебя все создано, соответсвенно у дочернего процесса свой ЛистВью и прочая лабудень что насоздавал родитель. Соответсвенно к тому что нарисованно родителем фокер никокого отношения не имеет.

C QThread тоже надо быть поаккуратнее. Не знаю как в X Window, а в винде окна принадлежат потоку (thread), а не процессу, посему надо делать все тщательнее. Мютексы и прочая лабудень не помогут (в вин). Вернее помогут, но не сильно.

Я делал все это через QProcess. Тогда получается все single thread и нет гемора с синхронизацией.

anonymous
()

Честно говоря не пробовал. Наверное можно. А ты проверял, доходит ли дело до самого добавления item`ов?

anonymous
()

С QProcess доходит во всю.

PS: anonymous (*) (2003-07-08 11:11:54.524672) -- это я, просто не подписаля

yuriy123
()

Сенкс, попробуем...

SnakePAN
() автор топика

Я как помню взаимодействи между QThread осуществляется при помощи слотов и сигналов

anonymous
()

Ни как. Делаешь открытым в классе какого-нибудь наследника от QObject. Соответственно конектишься с ним.

anonymous
()

QProcess могет запускать внешние проги, а не внутренние функции.Или я чего-то не догнал?

SnakePAN
() автор топика

Ага, щаз

Threads and Signals and Slots The Signals and Slots mechanism can be used in separate threads, as long as the rules for QObject based classes are followed. The Signals and Slots mechanism is synchronous: when a signal is emitted, all slots are called immediately. The slots are executed in the thread context that emitted the signal.

Warning: Slots that generate window system events or use window system functions must not be connected to a signal that is emitted from a thread that is not the GUI thread. See the Qt Library Mutex section above for more details.

yuriy123
()

QProcess запускает внешнюю прогу, где ты можешь делать все что душе угодно, все взаимодействие с родителем через stdin/out

yuriy123
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.