Запуск QProcess из QThread |
Здравствуйте, гость ( Вход | Регистрация )
Запуск QProcess из QThread |
Sokoloff |
25.10.2009, 1:32
Сообщение
#1
|
Участник Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: 11 |
Не могу до конца понять как запустить процесс (QProcess) из потока. Написал так:
Запускаю 2 потока,
Потоки запускаются, отображают листинги. Но через некоторое количество итераций, один из процессов не может стартовать, т.е. метод proc.waitForStarted(5000) отваливается по таймауту. Перечитал документацию, и не могу понять, я что-то неправильно делаю, это глюк в PyQt, или глюк на моей конкретной машине? Еще прочитал, что для работы в QThread нужно запустить "event loop" с помощью exec(), но куда его вставить? Если до моего кода, то до кода собственно дело и не дойдет ("event loop" будет крутиться до exit-а), а если после создания QProcess, то ошибка произойдет до вызова exec. Или в данном случае "event loop" не причем? P.S. Пример демонстрационный. Kubuntu 9.04, libqt4-dev - 4.5.2, python-qt4 - 4.5.4 |
|
|
Litkevich Yuriy |
25.10.2009, 2:11
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Еще прочитал, что для работы в QThread нужно запустить "event loop" с помощью exec(), но куда его вставить? См. Создание потокаВот пример из описания класса QThread: здесь exec() в конце метода run()
|
|
|
BRE |
25.10.2009, 10:33
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Попробуй дожидаться остановки потока:
Цитата Еще прочитал, что для работы в QThread нужно запустить "event loop" с помощью exec(), но куда его вставить? Если до моего кода, то до кода собственно дело и не дойдет ("event loop" будет крутиться до exit-а), а если после создания QProcess, то ошибка произойдет до вызова exec. Или в данном случае "event loop" не причем? eventloop нужно запускать, если тебе необходимо обрабатывать события в своем потоке. В данном случае он не нужен. Сообщение отредактировал BRE - 25.10.2009, 10:33 |
|
|
Sokoloff |
25.10.2009, 11:32
Сообщение
#4
|
Участник Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: 11 |
Попробуй дожидаться остановки потока: Не помогает. Да и не понятно, как оно может помочь, проблема именно в том, что иногда не запускается QProcess. eventloop нужно запускать, если тебе необходимо обрабатывать события в своем потоке. В данном случае он не нужен. Смутила следующая фраза: Цитата Цикл обработки сообщений сделан возможным для потока, чтобы можно было использовать некоторые не-GUI классы Qt, которые требуют наличия цикла обработки сообщений (такие как QTimer, QTcpSocket и QProcess). http://www.doc.crossplatform.ru/qt/4.3.2/t...read-event-loop |
|
|
BRE |
25.10.2009, 11:45
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Смутила следующая фраза: Цитата Цикл обработки сообщений сделан возможным для потока, чтобы можно было использовать некоторые не-GUI классы Qt, которые требуют наличия цикла обработки сообщений (такие как QTimer, QTcpSocket и QProcess). Если ты захочешь обрабатывать сигналы, которые будет посылать QProcess, тогда нужно будет сделать connect и запустить eventloop. |
|
|
Текстовая версия | Сейчас: 2.1.2025, 17:08 |