|
0 / 0 / 0
Регистрация: 02.08.2011
Сообщений: 4
|
|||||||||||
Проблемы с таймером или с логикой?03.08.2011, 01:05. Показов 2202. Ответов 7
Метки нет (Все метки)
Господа, помогите начинающему:
Есть объект DynamicGameObject, его тип содержит статический список всех подобных объектов List GameObjects, а так же список объектов, которым сообщена функция движения (DynamicGameObject.Move.To(x,y,speed)) List MoveToObjects MoveToObjects обрабатывается в отдельном потоке, который создается функцией Movement(iDel) в статическом конструкторе. Поток проходит по списку, получает следующий объект, обрабатывает его движение за некоторый дискретный отрезок времени (iDel) Прогоняю тест на одном объекте с заданными параметрами, вычисляю теоретическое время движения, потом сравниваю с реальным и... Естественно не получаю равенства. Все бы ничего если бы разница была в сотых долях секунды (при iDel = 10 миллисекунд), но разница тем больше, чем меньше iDel. Так при задержке в 10 миллисекунд: Теоретическое время движения 10 сек Практическое время движения 15,59 сек при задержке в 100 миллисекунд: Практическое время движения 10,83 сек при задержке в 200 миллисекунд: Практическое время движения 9,95 сек при задержке в 300 миллисекунд: Практическое время движения 10,31 сек (Последний тест так же показывает, что время теста не является строго убывающей прогрессией зависящей от iDel. Наиболее точный результат, при точке финиша 100, получаем при iDel 310. Но точность пропадает если поставить координату например 80. При iDel меньше 5 программа так же ведет себя некорректно.) Помогите мне найти ошибку в логике программы или посоветуйте другой способ реализации движения.
Ну хорошо. Забудем о прошлом коде. Вот та же проблема в укороченной форме:
Извините не разобрался как остановить таймер, если можно помогите заодно и с этой проблемой.
0
|
|||||||||||
| 03.08.2011, 01:05 | |
|
Ответы с готовыми решениями:
7
Проблемы с логикой Проблемы с таймером Проблемы с таймером |
|
67 / 67 / 9
Регистрация: 18.04.2011
Сообщений: 124
|
||||||
| 03.08.2011, 02:31 | ||||||
|
Какая-то жесть, кстати, да. Я думал, что проблема в том, что таймер просто отрабатывает слишком часто - и действительно, при интервале в 5 миллисекунд у него адская погрешность, а при высоком (200-300) он довольно точен. Но почему при интервале 29-31 он точнее, чем при интервале 40?)
В общем, не смог придумать этому внятное объяснение и сделал тупой вариант в лоб - зато точный. Так подойдет?
0
|
||||||
|
0 / 0 / 0
Регистрация: 02.08.2011
Сообщений: 4
|
|||||||
| 03.08.2011, 11:52 [ТС] | |||||||
|
Накропал такой вот корявенький, но зато точный примерчик:
Такой вопрос - где можно посмотреть на реализацию стандартных методов С#? Очень бы хотелось посмотреть например на Thread.Sleep, чтобы успокоить свою совесть и увидеть что там тоже используется пустой цикл для ожидания...
0
|
|||||||
|
67 / 67 / 9
Регистрация: 18.04.2011
Сообщений: 124
|
|
| 03.08.2011, 12:33 | |
|
3y3, нет-нет, это плохо: у вас каждые две-три миллисекунды часы делают рестарт. У меня ваш код грузит процессор аж на 50%) Stopwatch я использовал просто как замену вашему Date.Time - так удобней замерять время.
Описание метода можно посмотреть, например, здесь. Thread.Sleep не использует пустой цикл для ожидания - просто поток, в котором он выполняется, отдает свое процессорное время и не участвует в работе. Процессор на нем отдыхает) Может, стоит зайти с другого конца: а зачем вам выражать приращение x как iDel * 0.01? Если x у вас - координата, то перебирая разные значения iDel, вы будете менять только плавность движения - скорость, время и расстояние останутся одинаковыми (ну, в пределах погрешности). Может, сделать просто x плюс константа, скажем, 0,1?
1
|
|
|
0 / 0 / 0
Регистрация: 02.08.2011
Сообщений: 4
|
|||||||
| 03.08.2011, 14:19 [ТС] | |||||||
|
(Тут я перестал писать ответ на сообщение и решил проверить еще один кусок кода)
Буду признателен, если Вы поможете мне деликатно остановить таймер в этом примере. Кстати на счет описания метода Thread.Sleep - msdn это первое место куда я лезу чтобы узнать о методе, но я имел в виду именно исполняемый код метода, а не его описание. Где найти подобную информацию (Я так понимаю можно копать даже в фреймфорке у себя на компе)
0
|
|||||||
|
67 / 67 / 9
Регистрация: 18.04.2011
Сообщений: 124
|
|||||||
| 03.08.2011, 15:20 | |||||||
|
3y3,
Остановка таймера - поскольку у вас Threading.Timer, его можно только убить методом извне:
0
|
|||||||
|
|
|||||||||||
| 03.08.2011, 16:54 | |||||||||||
2
|
|||||||||||
|
0 / 0 / 0
Регистрация: 02.08.2011
Сообщений: 4
|
||||||||||||
| 04.08.2011, 10:41 [ТС] | ||||||||||||
Проблема явно исчерпала себя... Добавлено через 17 часов 43 минуты http://blogs.msdn.com/b/ericli... etime.aspx
0
|
||||||||||||
| 04.08.2011, 10:41 | |
|
Помогаю со студенческими работами здесь
8
Проблемы с таймером Проблемы с таймером ATTiny13A Проблемы с таймером 2 в stm8l151k4 Проблемы с таймером 4 у stm8s103f2 (Решено)STM32f100 Проблемы с таймером 2. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|