![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
RazrFalcon |
![]()
Сообщение
#1
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
В итоге у меня запускается три Processor одновременно. А как сделать, что бы они стратовали по очереди? То есть, у меня есть отдельный поток, и в нем я запускаю обработку (что бы GUI не зависал). При том что новая обработка должна начинается сразу после окончания старой. А у меня как бы паралельно все работают.
|
|
|
![]() |
Dovgon |
![]()
Сообщение
#2
|
Студент ![]() Группа: Участник Сообщений: 92 Регистрация: 5.1.2011 Пользователь №: 2325 Спасибо сказали: 3 раз(а) Репутация: ![]() ![]() ![]() |
Почитай про симафоры или мютаксы. По простому передаешь в каждый процес один и тотже указатель на переменную, в начальном значении работает первый остальные ожидают, в конце первого процеза изминяешь его что бы заработал второй и так далее.
|
|
|
RazrFalcon |
![]()
Сообщение
#3
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Эммм... как то слишком сложно.
Может можно просто запускать процессы руками, когда захочу? |
|
|
RazrFalcon |
![]()
Сообщение
#4
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
up!
|
|
|
wiz29 |
![]()
Сообщение
#5
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: ![]() ![]() ![]() |
а зачем в таком случае 3 процесса запускать?
![]() |
|
|
RazrFalcon |
![]()
Сообщение
#6
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Перефразирую.
Нужно запустить программу с разными ключами 3-и раза. Подряд. PS: вы про .Да, не подумал о таком... Но это как то странно выглядит.
|
|
|
MJIbIu |
![]()
Сообщение
#7
|
Студент ![]() Группа: Участник Сообщений: 38 Регистрация: 14.4.2010 Пользователь №: 1630 Спасибо сказали: 3 раз(а) Репутация: ![]() ![]() ![]() |
Перефразирую. Нужно запустить программу с разными ключами 3-и раза. Подряд. PS: вы про .Да, не подумал о таком... Но это как то странно выглядит.а зачем запускать 3 раза если они будут у тебя идти по порядку ?
мб я не так понял Сообщение отредактировал MJIbIu - 31.8.2011, 16:27 |
|
|
RazrFalcon |
![]()
Сообщение
#8
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Ну сейчас так и происходит.
Разве что: приводит к зависанию главного окна, а не должен.По этому выкрутился, пока что, запуском процесса по окончании предыдущего:
Сообщение отредактировал RazrFalcon - 31.8.2011, 16:37 |
|
|
ssoft |
![]()
Сообщение
#9
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 130 Регистрация: 17.2.2010 Из: Москва Пользователь №: 1470 Спасибо сказали: 30 раз(а) Репутация: ![]() ![]() ![]() |
Вот так работает. Быстрый набросок.
main.cpp
ProcessManager.h
ProcessManager.cpp
|
|
|
RazrFalcon |
![]()
Сообщение
#10
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Оно то может и работает. Но у меня не консольное приложение.
У меня есть 2-а потока. Главный и второстепенный, в котором и запускается обработка. Так вот там уже Ваш способ не прокатит ![]() Проблема ведь в том, что я не могу запустить обработку НЕ в конструкторе класса, который помещаю в поток. |
|
|
ssoft |
![]()
Сообщение
#11
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 130 Регистрация: 17.2.2010 Из: Москва Пользователь №: 1470 Спасибо сказали: 30 раз(а) Репутация: ![]() ![]() ![]() |
Оно то может и работает. Но у меня не консольное приложение. У меня есть 2-а потока. Главный и второстепенный, в котором и запускается обработка. Так вот там уже Ваш способ не прокатит ![]() Проблема ведь в том, что я не могу запустить обработку НЕ в конструкторе класса, который помещаю в поток. Очень даже прокатывает. 1. Причем здесь тип приложения? ProcessManager можно создать в любом потоке, можно и во второстепенном. 2. Обработка, как я понимаю, происходит в вызываемых процессах, а не во второстепенном потоке. Здесь предложен способ последовательного запуска процессов обработки без использования второстепенного потока, при этом GUI не будет подвешиваться, так как используется ассинхронное оповещение через очередь сообщений Qt. |
|
|
RazrFalcon |
![]()
Сообщение
#12
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Ну у меня ваш код не заработал. Так что...
|
|
|
ssoft |
![]()
Сообщение
#13
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 130 Регистрация: 17.2.2010 Из: Москва Пользователь №: 1470 Спасибо сказали: 30 раз(а) Репутация: ![]() ![]() ![]() |
Ну у меня ваш код не заработал. Так что... Всем желающим рабочий пример ![]()
Прикрепленные файлы
|
|
|
RazrFalcon |
![]()
Сообщение
#14
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
уже весeло...Зачем вообще юзать std в кьюте? Сообщение отредактировал RazrFalcon - 7.9.2011, 17:06 |
|
|
RazrFalcon |
![]()
Сообщение
#15
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Вопрос все еще открыт.
|
|
|
Sokoloff |
![]()
Сообщение
#16
|
Участник ![]() ![]() Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
RazrFalcon |
![]()
Сообщение
#17
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Если вы про тот что я привел, то тут тоже не все гладко.
Валятся такие ошибки:
Если сделать дополнительно waitForFinished(), то вроде пашет, но текст на сигнал readyReadStandardOutput() не приходит, так как процесс ждет... Вот и не ясно как оно должно работать? Вопрос: нужен ли waitForFinished() внутри дочернего потока? |
|
|
RazrFalcon |
![]()
Сообщение
#18
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Up
|
|
|
RazrFalcon |
![]()
Сообщение
#19
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Написал пример (в аттаче).
Почему оно не работает? У меня с waitForFinished(); главное окно не появляется, без - валятся потоки: Раскрывающийся текст
А вывод должен быть таким:
Заранее спасибо! Сообщение отредактировал RazrFalcon - 13.10.2011, 4:15
Прикрепленные файлы
|
|
|
BRE |
![]()
Сообщение
#20
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Ну так Qt в консоль тебе все пишет.
![]() |
|
|
RazrFalcon |
![]()
Сообщение
#21
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
![]() И что я должен исправить?! |
|
|
BRE |
![]()
Сообщение
#22
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
![]() И что я должен исправить?!
|
|
|
RazrFalcon |
![]()
Сообщение
#23
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
Огромное спасибо! Теперь пашет.
И как я не мог до этого додуматься уже как 2-а месяца... |
|
|
PAFOS |
![]()
Сообщение
#24
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: ![]() ![]() ![]() |
Цитата Разве что: bool QProcess::waitForFinished ( int msecs = 30000 ) приводит к зависанию главного окна, а не должен. решается просто while( !process->waitForFinished(10) ) qApp->processEvents(); // все потоки работают и GUI не виснет |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 24.6.2025, 16:19 |