![]() |
|
Модераторы: diadiavova, gambit |
![]()
|
|
| s180 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.11.2009 Репутация: нет Всего: нет |
результаты экспериментов:
таймер работает неверно!!!!! при любом интервале, в событии timer_Elapsed я логгирую время срабатывания и каждый раз это время, то уменьшается, то увеличивается. Интервал срабатывания не выдерживается!!! За сутки разница первого срабатывания, по сравнению с последним может состоять до нескольких минут!! возможны ли какие-нибудь другие варианты, кроме "кривого" таймера? Это сообщение отредактировал(а) s180 - 11.11.2009, 10:17 |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Я, конечно, не проверял таймер в работе, но не исключаю, что причина в том, что время загрузки просто перкрывается. То есть не закончилась первая, начинается вторая и поток вынужден ждать очереди.
Если таймер в самом деле работает нечётко, то тут трудно что-либо придумать. Возможно следует вернуться к первому варианту, где загрузка будет координироваться из одного потока, а объекты задач будут только содержать информацию о том когда пора обновиться. Но реализовать это несколько сложнее. Можно попробовать укоротить интервалы (например вдвое) и всякий раз при срабатывании таймера просто сверяться со временем и определять пора обновляться или нет. Тут варианты разные, но что лучше з зависит от задачи, да и пробовать надо разные варианты, чтобы можно было выявить лучший. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| s180 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.11.2009 Репутация: нет Всего: нет |
интервалы минимум двухминутные, а размер скачиваемого файла меньше 50Kb, думаю время не может перекрываться. Да даже дело не в этом, я просто записываю в текстовый файл время срабатывания и разница у них точно не равняется интервалу! причём, ладно бы она всегда увеличивается, так она ещё и уменьшатсья может!!! т.е. срабатывает например не через 120 секунд а через 118,560!!! как такое может быть?? |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
s180, а если просто таймером щёлкать без закачки результат такой же?
Влюбом случае вариант, при котором щелчки таймера будут только сигналом для проверки необходимости закачки, решит проблему. Суммарная погрешность за любой промежуток времени не превысит интервала таймера. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| s180 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.11.2009 Репутация: нет Всего: нет |
вот как проверял таймер. результаты вот какие: 17-52-00-853 17-52-20-845 17-52-40-837 17-53-00-829 17-53-20-821 17-53-40-812 17-54-00-804 ... здесь получается, что каждый раз срабатывает на 8мс раньше, в других случаях бывает, что он наоборот бежит вперёд!! Добавлено через 2 минуты и 19 секунд
к сожалению не решают, вот сейчас пробую вариант, не с секундным интервалом, а с 200мс, посмотрим может там какие результаты будут. |
||||
|
|||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Судя по всему, ты не понял идею. Я говорю о варианте, при котором точность секундомера вообще не будет играть роли. Расклад примерно такой: У тебя в классе задания должны присутствовать свойства например NextUpdateTime As DateTime и UpdateInterval As TimeSpan Интервал таймера ставишь на величину равную предельно-допустимой погрешности работы задачи за всё время работы программы. То есть, если тебе надо чтобы за время работы программы ошибка во времени не превышала 10 секунд, то и ставь таймер на такое время. Всякий раз, когда срабатывает таймер выполняешь следующее действие Проверяешь наступило ли время очередного обновления(сравниваешь текущее время со значением NextUpdateTime) и если наступило, то сначала выполняешь загрузку, а затем к значению NextUpdateTime прибавляешь UpdateInterval и таким образом планируешь время следующего обновления. То есть обновление будет происходить не при каждом щелчке, а только тогда, когда уже наступило запланированное время и в этом случае планируется время нового обновления. Надеюсь объяснил понятно. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| s180 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.11.2009 Репутация: нет Всего: нет |
так я так и делаю. в коде я так и написал, устанавливаю интервал "тиканья" 1с, при каждом тике уменьшаю свойство-время на 1с и когда она станет равна 0 записываю в текстовый файл. При 200мс получается вроде неплохо, но когда увеличил, время срабатывания с 20с до 5 минут, погрешность стала сотсавлят 5с!!!!!
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Это ещё зачем? Я ведь не так написал. При тике просто проверяй пора обновляться или нет. Если пора - обновляйся и устанавливай время нового обновления. И всё. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| s180 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 2.11.2009 Репутация: нет Всего: нет |
всё. наконец-то всё отладил!!
diadiavova, спасибо большое за помощь. Действительно, установил интервал таймера 200мс и проверял время следующего обновления, погрешность в мс составляла примерно +/- 300. |
|||
|
||||
![]()
|
| Правила форума VB .NET | |
|
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |