crossplatform.ru

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

3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему
> Как правильно запустить несколько последовательных процессов?
ssoft
  опции профиля:
сообщение 5.9.2011, 14:48
Сообщение #11


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 17.2.2010
Из: Москва
Пользователь №: 1470

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




Репутация:   3  


Цитата(RazrFalcon @ 1.9.2011, 15:27) *
Оно то может и работает. Но у меня не консольное приложение.
У меня есть 2-а потока. Главный и второстепенный, в котором и запускается обработка. Так вот там уже Ваш способ не прокатит <_<
Проблема ведь в том, что я не могу запустить обработку НЕ в конструкторе класса, который помещаю в поток.


Очень даже прокатывает.

1. Причем здесь тип приложения?

ProcessManager можно создать в любом потоке, можно и во второстепенном.

2. Обработка, как я понимаю, происходит в вызываемых процессах, а не во второстепенном потоке.

Здесь предложен способ последовательного запуска процессов обработки без использования второстепенного потока, при этом GUI не будет подвешиваться, так как используется ассинхронное оповещение через очередь сообщений Qt.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 5.9.2011, 16:02
Сообщение #12


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Ну у меня ваш код не заработал. Так что...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ssoft
  опции профиля:
сообщение 7.9.2011, 13:06
Сообщение #13


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 17.2.2010
Из: Москва
Пользователь №: 1470

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




Репутация:   3  


Цитата(RazrFalcon @ 5.9.2011, 17:02) *
Ну у меня ваш код не заработал. Так что...

Всем желающим рабочий пример ;)

Прикрепленные файлы
Прикрепленный файл  test.zip ( 4,07 килобайт ) Кол-во скачиваний: 72
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 7.9.2011, 17:05
Сообщение #14


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


../test/program/main.cpp:2: error: conio.h: No such file or directory
уже весeло...

Зачем вообще юзать std в кьюте?

Сообщение отредактировал RazrFalcon - 7.9.2011, 17:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 11.9.2011, 22:30
Сообщение #15


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Вопрос все еще открыт.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 12.9.2011, 11:33
Сообщение #16


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

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




Репутация:   11  


Цитата(RazrFalcon @ 11.9.2011, 23:30) *
Вопрос все еще открыт.

Через сигнал finished, нормальное решение.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 12.9.2011, 15:33
Сообщение #17


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Если вы про тот что я привел, то тут тоже не все гладко.
Валятся такие ошибки:
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x92891d8), parent's thread is QThread(0x90fb448), current thread is QThread(0x91b9470)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x92891d8), parent's thread is QThread(0x90fb448), current thread is QThread(0x91b9470)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x92891d8), parent's thread is QThread(0x90fb448), current thread is QThread(0x91b9470)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x92891d8), parent's thread is QThread(0x90fb448), current thread is QThread(0x91b9470)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x92891d8), parent's thread is QThread(0x90fb448), current thread is QThread(0x91b9470)

Если сделать дополнительно waitForFinished(), то вроде пашет, но текст на сигнал readyReadStandardOutput() не приходит, так как процесс ждет...

Вот и не ясно как оно должно работать?

Вопрос: нужен ли waitForFinished() внутри дочернего потока?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 22.9.2011, 16:29
Сообщение #18


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Up
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 13.10.2011, 4:15
Сообщение #19


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Написал пример (в аттаче).
Почему оно не работает?

У меня с waitForFinished(); главное окно не появляется, без - валятся потоки:
Раскрывающийся текст
"0
"
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
"0
"
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
"0
"
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
"0
"
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QProcess(0x9d81ab0), parent's thread is QThread(0x9cef448), current thread is QThread(0x9ddb810)
QProcess::start: Process is already running
"0

А вывод должен быть таким:
0
1
2
3
4
etc.


Заранее спасибо!

Сообщение отредактировал RazrFalcon - 13.10.2011, 4:15
Прикрепленные файлы
Прикрепленный файл  thread_example.zip ( 2,91 килобайт ) Кол-во скачиваний: 58
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 13.10.2011, 7:28
Сообщение #20


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

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Ну так Qt в консоль тебе все пишет. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 30.11.2024, 12:54