Торможения таймера при рисовании, Python |
Здравствуйте, гость ( Вход | Регистрация )
Торможения таймера при рисовании, Python |
zuze |
29.3.2013, 10:34
Сообщение
#1
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Я пытаюсь закрасить область красным цветом за определённое время. Область будет закрашиватся каждый раз пока я не остановлю таймер.
Код:
Должно быстро закрашиватся цветом, а закрашивается, только через каждые 0.5 секунды. Почему так происходит? В Qt всё быстро закрашивается. |
|
|
Iron Bug |
29.3.2013, 11:02
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
питон - интерпретатор. его скорость от 10 до 500 раз ниже, чем у кода С++, в зависимости от того, что делаешь.
|
|
|
zuze |
29.3.2013, 11:17
Сообщение
#3
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
питон - интерпретатор. его скорость от 10 до 500 раз ниже, чем у кода С++, в зависимости от того, что делаешь. А можно ли в коде на Python вставить код, который однозначно показывал, что виноват сам Python, а не я? Притом, такая простейшая операция, как закрашивание области цветом во времени. Мне не веритя, что такая простая операция затормаживает таймер в Python. Сообщение отредактировал zuze - 29.3.2013, 11:22 |
|
|
Iron Bug |
29.3.2013, 16:57
Сообщение
#4
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
если ты утверждаешь, что Qt не тормозит, то больше не на что списать тормоза, кроме как на интерфейс между Qt и питоном.
ну и реализация алгоритма весьма странная: у тебя каждый раз вызывается процедура закрашивания точки. это вызывает целую цепочку операций, в итоге идёт обращение к графической библиотеке и это происходит для каждой точки. естественно, что это тормозит. наверняка есть более быстрые методы работы с заполнением прямоугольника цветом, чтобы не делать столько длинных вызовов. кроме того, у тебя каждый раз в каждой итерации создаётся объект QColor, да ещё и с вызовом его метода, а на любое создание объекта нужно довольно много времени. питон - интерпретатор, он не умеет оптимизировать такие сложные вещи, это надо делать самому. в общем, там много где можно опимизировать. а для измерения времени можно попробовать навставлять таймеры и писать замеренное время в какой-то лог (только не на экран, а в память, а то ещё ужаснее будут тормоза из-за самих записей). |
|
|
zuze |
3.4.2013, 15:28
Сообщение
#5
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Прямоугольная область с торможениями закрашивается красным цветом. Но вот один раз я абсолютно также сделал и прямоугольная область быстро начала зарисовыватся красным цветом.
Как будто это сбой самого Pathon-а. Решил привести полный код. Может кто увидит, где может быть ошибка и отпишется. Мой код:
Сообщение отредактировал zuze - 3.4.2013, 15:51 |
|
|
lanz |
4.4.2013, 9:20
Сообщение
#6
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
(0.005 * 1000) / 60 ~ 0 Поэтому таймер будет выстреливать так быстро как может, то есть постоянно. А в обработчике таймера его ждет такой цикл:
Т.е. картинка перегенерируется постоянно, это небыстро, отсюда и тормоза. Сообщение отредактировал lanz - 4.4.2013, 9:21 |
|
|
zuze |
4.4.2013, 9:24
Сообщение
#7
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Т.е. картинка перегенерируется постоянно, это небыстро, отсюда и тормоза. А как это поправить? У меня даже таймер
тормозит, а такой таймер необходим и в Qt работал. А почему он в Python иногда проскакивает с быстрой скоростью? Сообщение отредактировал zuze - 4.4.2013, 9:29 |
|
|
lanz |
4.4.2013, 9:50
Сообщение
#8
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Цитата А как это поправить? Нужно картинку сгенерировать один раз, например при запуске программы. Цитата такой таймер необходим и в Qt работал Может он и в Qt тормозил, 0.8 мс это очень быстро, так быстро даже курсор мыши не обновляется, 15-30 мс более разумные рамки. Цитата А почему он в Python иногда проскакивает с быстрой скоростью? Может быть тысяча причин и ни на одну нельзя полагаться. Например удачно выпадает переключение процессов или байт код питоновский закешировался. Написание приложений реального времени в Windows сродни квантовой механике |
|
|
zuze |
4.4.2013, 10:17
Сообщение
#9
|
Участник Группа: Участник Сообщений: 211 Регистрация: 4.11.2012 Пользователь №: 3589 Спасибо сказали: 0 раз(а) Репутация: 0 |
Может он и в Qt тормозил, 0.8 мс это очень быстро, так быстро даже курсор мыши не обновляется, 15-30 мс более разумные рамки. Я сделал так
А в место 5 секунд обновляется, через каждые 3 секунды. Я делал так
Картинка через каждые 0,5 секунды обновляется. Что же с этим таймером? Сообщение отредактировал zuze - 4.4.2013, 10:27 |
|
|
lanz |
4.4.2013, 10:37
Сообщение
#10
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Если картинка не успевает обновится за 15 мс (а она наверняка не успевает) то поток блокируется до тех пор, пока она не обновится. Все это время сообщения от таймера скапливаются и будут обработаны только когда поток освободится. Поэтому и задержка, т.е. реальное время где то 0,5 секунды и быстрее не получится.
|
|
|
Текстовая версия | Сейчас: 14.11.2024, 7:22 |