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