![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
SABROG |
![]()
Сообщение
#21
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Таймер и другой поток необходимы в ситуации, когда по таймауту вызываются "долгоиграющие" методы, которые блокируют цикл сообщений и соответственно подвешивают GUI. Как вариант можно по таймауту запускать существующий поток на выполнение, после того как он сделает своё черное дело усыплять его. Естественно при такой схеме таймер будет существовать в основном потоке.
|
|
|
AD |
![]()
Сообщение
#22
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Задается определенное время, например 15 минут или 2 часа и запускается поток работы прожектора (прожектор начинает вращаться в 2 плоскостях - вертикальной и горизонтальной) - чтобы приложение в этот момент не висело, то вынесено в отдельный поток (заодно идет обучение правильной работы с доп. потоком). При этом запускаются часы, которые показывают оставшееся время работы прожектора.
|
|
|
igor_bogomolov |
![]()
Сообщение
#23
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Такую ситуацию сам Qtime отследит: Еще раз говорю, что не отследит.
Цитата warning: -66787 Т.е. если ты включил свой прожектор в один день, например, в 23.00, а выключить надо в 00.15 уже другого дня, ты получишь отрицательное время. Цитата(AD) заодно идет обучение правильной работы с доп. потоком Прежде чем работать с потоками, нужно разобраться со способами синхронизации потоков.
Сообщение отредактировал igor_bogomolov - 15.6.2009, 17:44 |
|
|
AD |
![]()
Сообщение
#24
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(AD) заодно идет обучение правильной работы с доп. потоком Прежде чем работать с потоками, нужно разобраться со способами синхронизации потоков.Вот именно с этим и разбираюсь на практике. Можно как-то не так нравоучительно! ![]() ![]() что-то я даже подзапутался. Мне необходимо, чтобы определенное действие происходило 1 раз в минуту в течение заданного времени. Как это сделать? Еще один таймер заводить и запускать его уже в доп. потоке? |
|
|
kwisp |
![]()
Сообщение
#25
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Мне необходимо, чтобы определенное действие происходило 1 раз в минуту в течение заданного времени. ну если раз в минуту то могу предложить стартовать таймер в программе предположим каждые 10 секунд завести член класса QTime time наращивать его в timerEvent`e на десять секунд. при достижении определенного времени останавливать таймер сбрасывать время. как то так. |
|
|
igor_bogomolov |
![]()
Сообщение
#26
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Мне необходимо, чтобы определенное действие происходило 1 раз в минуту в течение заданного времени. Как это сделать? Еще один таймер заводить и запускать его уже в доп. потоке? Тут столько разных реализаций придумать можно. Несколько у тебя уже есть.
|
|
|
AD |
![]()
Сообщение
#27
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#28
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#29
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
вызвать сигнал, который ассоциирую со слотом, выполняющим нужные мне вращения прожектора.
igor_bogomolov, прости, но я в упор не понимаю, чем плохо то, что получилось отрицательное число? вот я задал такой код:
В Петербурге сейчас 10:50 (округленно). Он мне и посчитал, что до окончания работы должно пройти 13 часов 10 минут. Ведь правильно? В чем проблемы? Т.е. в t занеслось вполне корректное время. Функция addSecs умеет обрабатывать заданные промежутки. Где может поломаться-то? |
|
|
igor_bogomolov |
![]()
Сообщение
#30
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(Игорь) А я вот совершенно не уверен (по тому коду, что сейчас есть). Что произойдет, когда int secs станет отрицательным. t = t.addSecs(secs) останется инициализированным нулями? Я не проверял такого поведения. Т.е. я не говорил, что это плохо, а только то что, не знаю как данный код отработает. Теперь буду знать, что addSecs может принимать отрицательное значение, и коректно его отрабатывать.Тагда остается проблемма если твой прожектор должен крутиться больше суток ![]() Если конечно такое возможно Сообщение отредактировал igor_bogomolov - 16.6.2009, 11:05 |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 19.6.2025, 14:07 |