0 / 0 / 0
Регистрация: 13.06.2015
Сообщений: 10
|
|
1 | |
WPF Разная скорость выполнения потока02.04.2019, 15:21. Показов 1476. Ответов 5
Метки многопоточность (Все метки)
Здравствуйте! недавно начал изучать WPF и программировать на нём. Задался задачей портировать одно приложение с паскаля на wpf(кода много, но благодаря привязке данных wpf это позволяет писать более компактный код).
И Собственно суть: есть класс Game, содержащий позиции и скорости 2 объектов на "поле": цель и курсор. Запуск поиска цели или демонстрации движения происходит в отдельном потоке(вызывается функция из класса). И! Со старта движения курсора и/или цели идут быстро и плавно, но затем резко замедляется раза в 3-5. Но если водить мышкой по RadioButton`ам, или по кнопке на окне(заставляя перерисовываться окно) курсор начинает бежать как и со старта, быстро. Вопрос: с чем связан такой прикол? И в какую сторону копать, чтобы скорость была постоянной? Код проекта в прикрепленном файле.
0
|
02.04.2019, 15:21 | |
Ответы с готовыми решениями:
5
Разная скорость работы приложения Многопоточная программа. Разная скорость работы потоков CallBack после окончания выполнения потока Скорость выполнения операций |
Модератор
|
|
04.04.2019, 17:20 | 2 |
Linder666, несколько замечаний-рекомендаций.
1) Первое, что надо изучить в WPF это компоновка UI элементов. Свойство Margin нужно для задания расстояния между элементами, а не их положения. Не изучив WPF компоновку идти дальше бессмысленно. 2) WPF дефолтно предназначено для использования с MVVM. Без MVVM это подобно забиванию гвоздей микроскопом. Конечно, можно, но ужасно неудобно. 3) Вы пишите за скорость. Скорость это производная от времени. Но я что-то не увидел у Вас в проекте ни одного таймера. Я или что-то пропустил, или Вы под скоростью что-то другое имеете ввиду? Добавлено через 1 минуту P.S. Прочитайте темы из цикла Готовые решения, примеры и рекомендации начинающим на WPF [Элд Хасп]
0
|
0 / 0 / 0
Регистрация: 13.06.2015
Сообщений: 10
|
|
05.04.2019, 15:09 [ТС] | 3 |
Элд Хасп, Запустите программу, и выберите любой вид движения под графой статический вид. Поводите мышкой над этими Radoibutton`ами, а потом уберите её за пределы окна, и сравните как быстро бежит зеленый квадрат по полю
0
|
Модератор
|
|
05.04.2019, 15:19 | 4 |
Сообщение было отмечено Linder666 как решение
Решение
Я это вижу и понял сразу.
Я Вам пишу за другое. Если Вы хотите обеспечить одинаковую СКОРОСТЬ, то надо учитывать, что скорость это производная от времени. В для определения времени нужны ТАЙМЕРЫ. А у Вас их нет. Всё что у Вас есть это разные Sleep. Но Sleep не даёт равных промежутков. Он определяет минимальный промежуток. А реальный зависит от ОС, загруженности системы, конфигурации компьютера. У меня, допустим, всё работает с одинаковой скоростью. Но это случайность. Вам перед каждым шагом надо определять прошедшее время с предыдущего шага. И перемещаться на расстояние пропорциональное прошедшему промежутку.
1
|
0 / 0 / 0
Регистрация: 13.06.2015
Сообщений: 10
|
||||||
05.04.2019, 16:10 [ТС] | 5 | |||||
Элд Хасп, Благодарю за совет.
Действительно, как у меня и были задумки насчёт этого, нужно было считать время выполнения кода. Возможно многим это покажется костылем, но... : Кликните здесь для просмотра всего текста
Модификация CursorAndTarget.cs
0
|
Модератор
|
|
05.04.2019, 16:19 | 6 |
Вообще, для ООП надо делать немного другую реализацию.
Что-то в таком духе. Функция перемещения - это функция объекта (зелёного ромба). Должен быть объект. В нём функционал его перемещения. Перемещение основано на внутреннем таймере. Внешний код передаёт в это объект направление и скорость перемещения. Объект во внешний код сообщает через события о изменении состояния (новых координатах), коллизиях (достижения границы, захват). Добавлено через 1 минуту Вот этот цикл while (stopWatch.ElapsedMilliseconds < 10) ; откровенный костыль.
0
|
05.04.2019, 16:19 | |
05.04.2019, 16:19 | |
Помогаю со студенческими работами здесь
6
Перенаправление выполнения с одного потока в другой. Не UI потоки Приостановка потока до выполнения какого либо события Как получить скорость потока (kbps/s) wav файла Не могу достать данные из потока во время выполнения цикла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |