![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
![]()
Если внутри таймера есть, допустим sleep(1000)
А интервал таймера, допустим 5000. То реально интервал таймера задержится на 1000 и составит 6000? И что будет происходить, если во время sleep(1000) происходит итерация другого таймера? События второго таймера не произойдут? У меня задействовано несколько таймеров, и часто нужного действия по одному из таймеров не происходит, в том числе запросы к серверу. Последний раз редактировалось Illusiony; 21.04.2015 в 16:28. |
![]() |
![]() |
![]() |
#2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
По идее получится суммарная задержка, но делать так это все равно что костыль ставить.
I'm learning to live...
|
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]() Цитата:
![]()
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
![]() |
![]() |
![]() |
#4 | |||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
предлагаю сразу отрубить руки тому, кто в процедуре на таймере задержки ставит. Чтобы не гадил.
Цитата:
Просто на эту секунду задержки форма не будет обрабатывать запросы виндоуз (видели когда-нибудь в Windows "программа не отвечает" ?! Это оно и есть). Цитата:
либо совсем будет потеряно. либо событие будет поставлено в очередь и сработает после "отвисания" Цитата:
Дисклаймер. всё сказанное является моим личным мнением и не претендует на истину. |
|||
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
![]()
Не умею я многопоточность использовать. Но уже почти все что я хотел сделал, вот только такие моменты все портят.
У меня по таймеру необходимо кликать в программе по нужным координатам мышкой. Для этого нужны задержки между изменением позицией нажиманием-отжиманием, иначе не сработает. Получается, что по идеи даже не должно налаживаться( по времени таймеры не совпадают), но по какой то причине не проскакивают действия на 45 итераций 2-10 не проскакивают. Закономерностей между такими случаями отследить не удалось, чтобы как то связать с интервалами таймеров Работает так: timer2 запущен с интервалом в 1000. по timer1 осуществляется запрос к серверу далее некоторые расчеты, потом клики и sleep(100), sleep(500). После он устанавливает глобальную переменную timer_int=20.Останавливает timer2, задает ему интервал =timer_int. и запускает заново timer2. по timer2 уменьшает на 1 переменную timer_int и если она станет=1 то запускает timer3 (3000) по которому и происходят проскальзывания действий. Да все запутанно. Скорее всего получается что иногда, если запрос к серверу будет более 400 миллисекунд, то суммарно с задержками (sleep(100), sleep(500))может составить 1 секунду, и если в это же время в timer2 timer_int=1 когда должен запуститься timer3, он не запускается и происходит проскальзывание. Если так, то я не знаю можно ли, отделаться малым и решить проблему не прибегая к многопоточности. Неужели придется эти sleep заменить на таймеры, что я делал до этого чтобы избежать продолжительного зависания? Последний раз редактировалось Illusiony; 21.04.2015 в 17:11. |
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,542
|
![]() Цитата:
Код:
Код:
Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 21.04.2015 в 17:48. |
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
![]()
Протестил, оказалось что даже без кликов мышкой и без этих sleep все равно есть проскальзывания
![]() Хз в чем дело. |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
![]()
Сделал немного по другому логику, пока нормально по крайней мере до sleep теперь нормально работает.
Буду тестить со слипами теперь. |
![]() |
![]() |
![]() |
#9 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
У тебя таймер работает в главном потоке, и зависит (скорее всего) от сообщений. Если поток не успевает отловить сообщение вовремя таймер сработает не всегда тогда, когда ожидается.
Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
![]()
Изменил еще немного логику, убрал timer2 его функции переложил на timer1. Таким образом sleep оказались в одной процедуре и нету параллельности, и соответственно конфликта.
Что будут, если: Код:
что будет с счетчиком? Последний раз редактировалось Illusiony; 22.04.2015 в 18:03. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Один таймер vs много таймеров - дайте совет | Linel | JavaScript, Ajax | 11 | 31.03.2014 18:18 |
Как создать больше таймеров? | jone | Общие вопросы Delphi | 39 | 26.04.2013 10:18 |
Работа с таймеров в Qt | papos | Общие вопросы C/C++ | 0 | 14.11.2010 20:05 |
Менеджер таймеров | Alex Cones | Общие вопросы Delphi | 9 | 11.11.2010 19:34 |
Варианты реализации программы с использованием таймеров | Casper-SC | Общие вопросы Delphi | 10 | 28.11.2009 19:18 |