Пытаюсь замутить свой симулятор.
| |
V9 | Дата: Понедельник, 22.04.2024, 12:24 | Сообщение # 161 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 544
Награды: 11
Репутация: 2
Статус: Offline
| V.0.0.5.3 Это доработка режима архиватора. Какие были проблемы? В версии V.0.0.5.1 и V.0.0.5.1 я в архив докладывал 7zip.exe. А он 200кб занимает. Т.е. архив большой. Но выхода не было. Но проблема возникла: я прикладывал 32х битный 7zip.exe, так как 64х битный просто не запустится у людей с 32х-битными операционками. Но если человек скачал и установил прогу 7zip в 64х битном варианте, то мой 7zip.exe тоже не сможет отработать: в реальности упаковывает библиотека 7zip.dll что расположена в каталоге установки и она должна иметь ту же разрядность, что и 7zip.exe.
Дальше было много приключений, чтобы как-то заставить это все работать. =) Где проблема? Проблема в том, что создатель 7zip при установке своей программы не добавляет себя в путь поиска PATH - https://learn.microsoft.com/ru-ru/windows-server/administration/windows-commands/path
Если бы 7zip бы себя добавлял, то проблем бы не было: просто запускай 7zip, а Windows найдет. Учить пользователей геморройно. Да и не рекомендуется заставлять пользователей что-то делать.
Но при установке 7zip ставится в Program Files. И опять таки проблема: если у пользователя 32х битная или 64х битная, то 7zip ляжет просто в Program Files. А вот если пользователь поставить 32х битный 7zip на 64х битной ОС, то в Program Files(x86). Т.е., надо отрабатывать любую возмжность. А ведь, строго говоря, мы не знаем, где Program Files(PF) будет находиться! Я видел, что операционка и все ее каталоги, включая PF, находтся на диске D:! А можно при установке и вообще кастомное имя задать.
К счастью, Windows дает решение: эти переменные лежат в переменных среды под именами ProgramFiles & ProgramFiles(x86) : https://learn.microsoft.com/en-us/windows/deployment/usmt/usmt-recognized-environment-variables

На таком языке как Си это достать легко. Все переменные среды подаются на вход в прогу в самом начале как параметр envp: https://learn.microsoft.com/ru-ru/cpp/c-language/arguments-to-main?view=msvc-170

Но я на Джаве, а там доступа к этому параметру нет вообще!
........
Эту проблему позже удалось решить. Сейчас Архивариус надежно ищет сам 7zip, корректно копирует файлы перед архивацией, потом корректно 7zip запускает, корректно потом все удаляет. Но! Блин, но как же тяжело через это все проламываться!Добавлено (01.05.2024, 19:40) --------------------------------------------- Не успел к концу апреля выложить, слишком много нашлось всякого разного непонятного "как делать" в контексте производимого. А-ля - "Фигня вопрос тепловоз сделать! Дизель берем в Коломне, раму - в Брянске, обвес делаем сами!" А потом дизель греется, коленвал запарывается, рама идет трещинами и т.п.
| |
| |
olegpersh999 | Дата: Пятница, 10.05.2024, 05:54 | Сообщение # 162 |
Начальник станции
Группа: Пользователи
Сообщений: 218
Награды: 3
Репутация: 0
Статус: Offline
| Долгое время отсутствовал. 0053 версия последняя да? ГИДа не было еще?)
| |
| |
V9 | Дата: Суббота, 11.05.2024, 20:29 | Сообщение # 163 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 544
Награды: 11
Репутация: 2
Статус: Offline
| Цитата olegpersh999 (  ) 0053 версия последняя да? ГИДа не было еще?) 0.0.5.3 - последняя. ГИДа не было. Завтра буду писать алгоритм поворота текста чтобы отрисовывать наклонно номера поездов. гуглить: Афинное преобразование. upd. https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B2%D0%BE%D1%80%D0%BE%D1%82
Сообщение отредактировал V9 - Суббота, 11.05.2024, 20:31
| |
| |
V9 | Дата: Воскресенье, 12.05.2024, 08:46 | Сообщение # 164 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 544
Награды: 11
Репутация: 2
Статус: Offline
|
| |
| |
olegpersh999 | Дата: Воскресенье, 12.05.2024, 15:37 | Сообщение # 165 |
Начальник станции
Группа: Пользователи
Сообщений: 218
Награды: 3
Репутация: 0
Статус: Offline
| Молодец! Здорово! Ждем!)
| |
| |
V9 | Дата: Понедельник, 13.05.2024, 19:40 | Сообщение # 166 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 544
Награды: 11
Репутация: 2
Статус: Offline
| Разобрался с блендингом. Теперь у меня нет вопросов по ноу-хау, я теперь знаю всё, что нужно на данном этапе. Теперь просто надо писать код.
| |
| |
olegpersh999 | Дата: Среда, 15.05.2024, 09:48 | Сообщение # 167 |
Начальник станции
Группа: Пользователи
Сообщений: 218
Награды: 3
Репутация: 0
Статус: Offline
| Удачи в этом нелегком деле!) А еще вопрос. В ГИДе четные поезда едут сверху вниз, а тут в графике исполненного движения наоборот нечетные едут. Переделывать будешь?
| |
| |
V9 | Дата: Среда, 15.05.2024, 18:51 | Сообщение # 168 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 544
Награды: 11
Репутация: 2
Статус: Offline
| Цитата olegpersh999 (  ) Удачи в этом нелегком деле!) А еще вопрос. В ГИДе четные поезда едут сверху вниз, а тут в графике исполненного движения наоборот нечетные едут. Переделывать будешь? http://gidural.ru/lib/exe/fetch.php?media=graf.png
ГИД Урал. Четные едут наверх, нечетные - вниз. ps. Полная ссылка. ГИД "Урал-ВНИИЖТ" http://gidural.ru/doku.php
| |
| |
olegpersh999 | Дата: Среда, 15.05.2024, 20:01 | Сообщение # 169 |
Начальник станции
Группа: Пользователи
Сообщений: 218
Награды: 3
Репутация: 0
Статус: Offline
| V9, видать еще может и от дороги зависит. У меня наоборот
| |
| |
olegpersh999 | Дата: Среда, 15.05.2024, 20:04 | Сообщение # 170 |
Начальник станции
Группа: Пользователи
Сообщений: 218
Награды: 3
Репутация: 0
Статус: Offline
|
| |
| |
uyran | Дата: Четверг, 16.05.2024, 07:19 | Сообщение # 171 |
Маневровый диспетчер
Группа: Пользователи
Сообщений: 33
Награды: 0
Репутация: 0
Статус: Offline
| Ого, и когда ждать эту красоту?
| |
| |
V9 | Дата: Вторник, 21.05.2024, 23:03 | Сообщение # 172 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 544
Награды: 11
Репутация: 2
Статус: Offline
| Есть у меня психологическая проблема. Я сам себе ставлю некие задачи повышенной сложности которые сам же потом не могу решить. Из-за чего общий прогресс замедляется или стоит на месте. Надеюсь, я смогу это побороть в себе.
| |
| |
olegpersh999 | Дата: Среда, 22.05.2024, 11:34 | Сообщение # 173 |
Начальник станции
Группа: Пользователи
Сообщений: 218
Награды: 3
Репутация: 0
Статус: Offline
| V9, верю, что всё у тебя получится и ты справишься!
| |
| |
V9 | Дата: Понедельник, 27.05.2024, 19:36 | Сообщение # 174 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 544
Награды: 11
Репутация: 2
Статус: Offline
| 
Вот с такими глюками приходится воевать (шутка).Добавлено (27.05.2024, 19:46) --------------------------------------------- Предположительно, я делаю пока что ГИД похожим на Пульт Нева с такими испключениями:
- Можно будет на ходу менять цветовую схему. Пока что их будет три - Нева Серая, Нева Белая, ГИД Урал;
- Можно будет на ходу менять масштаб отображения;
- Можно будет несколько раз запустить прогу и раскидать ГИДы на разные экраны или же несколько окон на одном экране, но разные участки (и)или разный масштаб отображения.
- Можно будет запутить прогу с другого компа и ГИД будет отрисовываться на этом другом компе.
| |
| |
olegpersh999 | Дата: Среда, 29.05.2024, 08:44 | Сообщение # 175 |
Начальник станции
Группа: Пользователи
Сообщений: 218
Награды: 3
Репутация: 0
Статус: Offline
| Здорово! Очень жду!)
| |
| |
olegpersh999 | Дата: Понедельник, 03.06.2024, 09:19 | Сообщение # 176 |
Начальник станции
Группа: Пользователи
Сообщений: 218
Награды: 3
Репутация: 0
Статус: Offline
| V9, можешь помочь подшаманить сохранение? Перестали расформировываться поезда по Нижневартовску. Нечетных на выставление не было, загнал туда четные.
| |
| |
olegpersh999 | Дата: Понедельник, 03.06.2024, 17:57 | Сообщение # 177 |
Начальник станции
Группа: Пользователи
Сообщений: 218
Награды: 3
Репутация: 0
Статус: Offline
| Вот сохранение
| |
| |
V9 | Дата: Вторник, 04.06.2024, 16:57 | Сообщение # 178 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 544
Награды: 11
Репутация: 2
Статус: Offline
| 
Я убрал один поезд, выставился порожняк, и после прохода 394го, начинается массовая уборка остальных.
| |
| |
olegpersh999 | Дата: Среда, 05.06.2024, 06:50 | Сообщение # 179 |
Начальник станции
Группа: Пользователи
Сообщений: 218
Награды: 3
Репутация: 0
Статус: Offline
| Спасибо большое за помощь) Видать все равно надо держать один путь свободным для выставления)
| |
| |
V9 | Дата: Пятница, 07.06.2024, 13:26 | Сообщение # 180 |
Поездной диспетчер
Группа: Пользователи
Сообщений: 544
Награды: 11
Репутация: 2
Статус: Offline
| Цитата V9 (  ) Есть у меня психологическая проблема. Я сам себе ставлю некие задачи повышенной сложности которые сам же потом не могу решить. Из-за чего общий прогресс замедляется или стоит на месте. Надеюсь, я смогу это побороть в себе.
Встрял на проблеме "параллельной работы двух потоков - Модели и Графики - и передачи данных между ними без задержек".
upd. Практически сразу нашлось правильное решение. Я на этой задаче месяц сидел, если без шуток. Поставил сам себе ограничения и не мог решить задачу в этих ограничениях. Но решил почти сразу, как выложил жалобу на форум.Добавлено (10.06.2024, 12:51) --------------------------------------------- В негативном ахрене от Java.
Суть. Обработка(программа) в DSim идет в два потока:
1. Поток №1 постоянно читает данные из GID.txt, разбирает их и должен отправить в поток №2. сигнализирует потоку №2 о поступлении новых данных. 2. Поток №2 занят отрисовкой графики на экране. Он вызывается (косвенно) из потока №1, а так же из операционки, если надо обновить окно (скажем, была другая прога над моим окном, убралась,надо отрисовать наше окно) или же как следствие действий пользователя. Скажем, пользователь изменил размеры, подвигал по окну мышкой, нажал клавиши и т.п.
По идее, ни поток №1, ни поток №2 никогда не должны тормозиться "обо что-то". Первый - потому что в будущем это должна быть Модель Мира, где будут ехать поезда и она должна в режиме реального времи все обсчитывать. Второй - потому что будет выглядеть как "тормозной интерфейс": пользователь максимизировал окно, прога задумалась, зависла, потом "раздуплилась".
Поэтому я ставил сам себе задачу написать передачу данных "без блокировок". 1. не должны использоваться мьютексы (mutex) - https://ru.wikipedia.org/wiki/%D0%9C%D1%8C%D1%8E%D1%82%D0%B5%D0%BA%D1%81 2. не должны использоваться volatile переменные, которые вызывают "атомарные операции" - https://ru.wikipedia.org/wiki/%D0%90%D1%82%D0%BE%D0%BC%D0%B0%D1%80%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F 3. Какой бы большой пакет данных не пришел, он должен быть передан "за один цикл". 4. Прога должна минимизировать "удаление устаревших аднных", данные должны правиться, а не удаляться. Это означает, что требуется еще и передача "использованных данных" обратно из потока №2 в поток №1 под будущие данные из GID.txt.
Задача была очень сложной и интересной, я перебрал что-то около 100 вариантов прежде чем смог сделать. И....
Оффтоп. В современных компах много процессоров на одном ядре. У каждого процессора есть своя кэш-память https://ru.wikipedia.org/wiki/%D0%9A%D1%8D%D1%88_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D0%B0
Если процессор поменял значение ячейки памяти, это значение остется только в кэше этого процессора. Но другой процессор может тоже захотеть "ознакомиться" с этой ячейкой. И вот чтобы другой процессор не увидел "старое значение" ячейки, существует специальный протокол MESI - https://habr.com/ru/articles/183834/
Т.е., в худшем случае, через пикосекундную задержку все другие процессоры ознакомятся с новым значением этой ячейки памяти, при этом само значение возможно и не покинет сам процессор никогда, никогда не будет записано в оперативную память.
"Переменные" в Java - это отсылки на ячейки оперативной памяти, которые, при работе, тоже будут сидеть в кэш-памяти. То есть, я рассчитываю, что записав некоторое значение в память с потока №1, через несколько пикосекунд я смогу ознакомиться со значением в другом потоке.
Конец оффтопа.
Моя задача так написать алгоритм, чтобы при любой модификации не получилось так, что одна и та же ячейка пишется одновременно из двух потоков. Он хорошо отработал на "старой джаве", которая тут лежит и которую я рекомендую качать. Но у пользователя может быть новая джава. Поэтому я проверил алгоритм на новой джаве, заодно проверив "однозначность алгоритма" т.е. последовательность передачи-приема.
И врезался в ошибку... Алгоритм иногда(!) работал, иногда(!) нет. Ошибка была только на поздних релизах. Начал разбираться...
И в шоке выяснил, что в Java есть "оптимизатор": если "оптимизатор", условно, 1000 раз прочел ячейку и там наблюдал одно и то же значение, он делал "предположение", что в этой ячейке ВСЕГДА будет храниться одно и то же значение. И перекомпилировал код так, чтобы в программу всегда передавалось одно и то же "считанное" значение, без обращения к памяти.
То есть, я запускаю два потока. 1. Если "генератор" запускается раньше, чем "потребитель", то оптимизатор "потребителя" видит, что значения в ячейке постояно меняются "генератором": "генератор" запустился раньше и начал "срать" данными. Оптимизатор ничего не оптимизирует, продолжает читать из памяти. 2. Если "потребитель" запустился раньше "генератора", то "потребитель", условно, 1000 раз "крутанется", увидит, что 1000 раз там "ничего нет", запустится "оптимизатор" и отныне и до конца работы проги я буду получать "ничего нет!". "Потребитель", после отработки "оптимизатора" уже ничего не будет читать из памяти, просто будет "крутиться" в пустом цикле и ничего не будет делать. Только занимать процессор и греть воздух. Добавлено (10.06.2024, 16:12) --------------------------------------------- Что же предлагает джава,чтобы не нарваться на "оптимизатор"? По факту - "для передачи данных между потоками используйте переменные типа volatile!"
Volatile-переменные - дико медленные. При их использовании процессор блокирует шину передачи данных командой LOCK для остальных процессоров, а сведения отправляются напрямую из процессора в оперативную память. Все остальные процессоры в этот момент сосут чупа-чупс стоят, если только не используют сведения из своей кэш-памяти. Команда LOCK используется для того, чтобы безопасно эксклюзивно обновить некую ячейку памяти. Но у меня специально было спроектировано так, чтобы этого не требовалось!
Сообщение отредактировал V9 - Пятница, 07.06.2024, 21:19
| |
| |
|