|
|
||||||
Чем событие Button Click отличается от события Button Click или крах компилятора ассемблерных оптимизаций13.03.2023, 12:07. Показов 2405. Ответов 27
Метки нет (Все метки)
Это крах ассемблерной оптимизации в Lazarus - быть точнее крах компилятора, или что-то тут не так. Почему? Потому что нажатие на кнопку ничем не отличается от нажатия на кнопку. То есть всё переменные, всё-всё-всё что моё - объявлено у меня внутри
procedure TForm1.Button1Click(Sender: TObject); Но увы - практика показала, что нажатие на кнопку в корне отличается от нажатия на кнопку, и причём - в коде причин этому - я не обнаружил никаких. Как всё было по порядку: В общем занимался я себе тюнингом своего ненаглядного "трактора" , и по ссылке рабочий код. Всё шло хорошо, пока я не решил что мало ассемблерной оптимизации и нужно добавить ещё. Добавил, и опишу как теперь это стало работать. Делаете первый запуск программы, размер поля по умолчанию 10 на10, угол 15, обратите внимание на правый столбец, первые верхние ячейки https://www.cyberforum.ru/blog... 1678659824 не закрывая программы измените размер поля на 20 на 20, вы уидите уползшие влево по таблице результаты работы, не закрывая программы измените размер таблицы снова 10 на 10, результаты снова уползут влево - вы это увидите обратив внимание на верхние ячейки правого столбца. И всё это происходит при том что все переменные объявляются снова при каждом нажатии кнопки. То есть становится совершенно очевидно, что даже если ошибка моя, то шансы её отловить при столь некорректной работе чего-то важного но явно не мной сделанного - нулевые. Очень жаль. И вот его вот эта реализация что работает с ошибкой, описанной в теме Кликните здесь для просмотра всего текста
Ссылка на код работающий без ошибок https://www.cyberforum.ru/blog... g7996.html Ну вы понимаете что тут я ничего сочинять не могу, и нажатие от кнопки для среды совершенно одинаково с нажатием этой-же кнопки, если всё перменные объявлены при этом с ним-же снова. Как я могу искать при условии что нажатие на кнопку не равно нажатию на кнопку - какую-то ошибку. Дайте совет если можете - как я могу сделать это если код работает как хочет, а не так как его писали. Я не писал так, чтобы одно и то-же было разным, я пишу так, что одно и то-же оно - одинаковое. В общем спаисбо за внимание, вряд-ли мне кто-то чем-то поможет. Но думаю, что может ... когда нибудь...ведь свистел уже раз рак на горе... вдруг ещё...
0
|
||||||
| 13.03.2023, 12:07 | |
|
Ответы с готовыми решениями:
27
Два события Click Button События Click для Button Событие click() по элементу button |
|
|
|
| 13.03.2023, 13:44 [ТС] | |
|
В общем ладно, вдруг кто-то заинтересуется этим интересным фактом.
Добавлено через 1 час 2 минуты И после такого ещё меня будут учить выскочки всякие, я не имею ввиду участников этого форума, как надо правильно программировать. Мне кажется что кое кому нужно для начала научиться проектировать процессоры, чтобы заикаться там ещё о чём-либо. Видите-ли мой код, критика с другого сайта, мешает процессору угадывать. Пусть идёт подальше этот предсказываюший-угадывающий процессор, пусть он лучше теперь предскажет судьбу своего создателя склонного к алхимии, магии и чародейству.
0
|
|
|
|
|
| 13.03.2023, 15:53 | |
|
Вряд ли дело в процессоре. delphi тащит много зависимостей, начиная с библиотеки визуальных компонентов и пр.. Т.е проблема скорее всего либо в самом delphi либо в вас Асм вставки даже на Си делают когда точно понимают что делают, а в дельфях и подавно. Смотрите в отладчике.
1
|
|
|
Модератор
4149 / 2360 / 812
Регистрация: 15.11.2015
Сообщений: 9,461
|
|
| 13.03.2023, 15:59 | |
|
CoderHuligan, у него lazarus.
0
|
|
|
|
|||||||
| 13.03.2023, 16:50 [ТС] | |||||||
|
Вот и я делал вставки точно понимая что делаю, так как перед ними гонял код без них чисто на паскале, и потихонечку ими заменял код.
И на каком-то этапе среда отказалась работать адекватно, хотя код был проверен сначала в высокоуровневом ЯП - паскале. Делал делал, а потом оно вдруг просто начало с просто так не то что работать с ошибками, а работать вообще рандомно. Тут на среду тоже как-бы что сказать можно? Ошибка появилась с интеграцией очередных прыжков, проверенных на паскале, и скорее всего это вина именно процессора...потому что ассемблер. Паскаль тут не при делах: ошибка рандомной работы появилась при очередной интеграции ассемблерной вставки. Не по теме: Не хотят-ли наши власти вложить не в рутуб, а в производство своей вычислительной техники - в смылсе отечественной? Рутуб по логике должен появится потом, по достижению каких-то успехов в этом деле. А то вроде получается что успехов никаких абсолютно, а радости полные штаны- что срочно требуется канал для её излияния. Или что, я в качестве программирования должен изучать процессоры интелкоре какие-то, зачем они мне, кто знает что в них? Я думаю что те кто их делает не знают этого сами. Там у них гадания какие-то , чревовещания, предсказывания, магия - зачем мне этот бред? Вот доказательство
До очередной ассмблерной вставки никаких похожих эффектов не наблюдалось. Добавлено через 9 минут Я могу понять всё, но понять почему один и тот-же код работает по разному - не могу, при том, что в нём полностью заново происходит инициализация всего что есть в нём. Добавлено через 3 минуты А одна мелочь - при возвращении размеров код работает правильно, тут да, скорее дело в том, что вставки сделаны не правильно. Хотя если честно - я не вижу ошибку. Добавлено через 2 минуты Да скорее ошибка у меня. Надо её искать. Ну если внимательно изучить таблицу - то ошибка у меня.
0
|
|||||||
|
Супер-модератор
|
|
| 13.03.2023, 16:56 | |
|
Hretgir, собственно, взял оба эти кода, скопировал себе в проект на разные кнопки, и что? Ничего. Совершенно идентичный результат при запуске и выполнении, могу скрин показать. (угол задал 45, размер грида - 10*10, поскольку других инструкций по пользованию кодом не было приведено - делаю так, как удобно мне)...
OS : Debian 10 Xfce Lazarus : 2.2.4 Так что не надо искать ошибки в компиляторе (тем более - в процессоре)...
0
|
|
|
|
|||||||
| 13.03.2023, 17:33 [ТС] | |||||||
|
если сделать 20 на 20 , то ошибка будет, а от 10*10 и до 15*15 - ошибки не будет. Добавлено через 4 минуты 20*20 угол 45 - ошибки нет... Добавлено через 2 минуты значит вновь созданный цикл не может оборваться при каких-то условиях. Странно как-то. Добавлено через 11 минут А...ну это фича такая при программировании ассемблерных вставок - не получается писать код типа аля-приблизительно. И вот что нужно было, правда я испугавшись перенёс немного
Добавлено через 3 минуты Вот в чём прикол if Biger<1 then begin без вставки и от сравнения с нулём срабатывало, вот так if Biger<0 then begin . Одни и те-же почти условия, но ассемблер требовательнее- требует более точного их описания. Добавлено через 7 минут Профит есть, если код зациклить без вывода в грид при размерах таблицы 1000 на 1000, то из 10-9 миллисекунд расчёта данных на грид выигрывается около 2 милисекунд. Но это не существенно. Блин. Добавлено через 3 минуты А нееееет, просто фишка в том, что условия проверяться стали в другом месте, соответствено потребовало изменения проверки условия на единицу. Вот так. Проверка условия сместилась на until steps=0; Добавлено через 2 минуты Вот такая магия без магии.
0
|
|||||||
|
|
||||||||||||
| 13.03.2023, 17:35 | ||||||||||||
|
Вот у вас:
Добавлено через 53 секунды
0
|
||||||||||||
|
|
|||||||||||||||||||||||
| 13.03.2023, 18:05 [ТС] | |||||||||||||||||||||||
Добавлено через 3 минуты Да точно оптимизация, я выиграл около 2 милисекунд из 9. Я хотел вернуть проверку условия, но решил продолжать тот-же путь каким и шёл. Как иначе вы сделает переход по переменной? Case? Вы полагаете что перебирание списка для получения адреса перехода и с переходом после - быстрее просто перехода сразу по указанному адресу? Добавлено через 5 минут Почему получается ускорение? Представьте себе мототрек, и вот есть трамплины, и есть кочки, проверка условий - это езда по кочками, а ассемблерные прыжки - прыжки по трамплинам над этими кочками. Ну я это так себе представляю. Добавлено через 8 минут Вот конкретно создав новый цикл и сделав это вверху
Полный код теперь выглядит у меня так Кликните здесь для просмотра всего текста
Добавлено через 4 минуты Так...ну теперь пришла часть оптимизации расчётов по меткам logic.
0
|
|||||||||||||||||||||||
|
|
|
| 13.03.2023, 18:18 [ТС] | |
|
А если тестить на расчётах для таблицы 10 000 на 10 000
внизу время расчёта без вывода таблицы, есть ли разница от оптимизацией всего одним ассемблерным трамплином? Я лично считаю что это оптимизация.
0
|
|
|
|
|
| 13.03.2023, 18:22 [ТС] | |
|
Оптимизация-ли это? Всего одна ассемблерная вставка. Ну правда на фоне многих других понятное дело она так выделяется. Но всё-же.
Ну это конечно без вывода данных в таблицу разумеется, иначе долго
0
|
|
|
|
||||||
| 13.03.2023, 20:49 [ТС] | ||||||
|
Ну и осталось математику оптимизировать, 10 000 ячеек правого столбца + и 10 000 последнй строки длительных расчётов и составляют в основном оставшуюся долю работы программы.
Добавлено через 5 минут и ошибочка тут как раз в математике затерлась как-то... Добавлено через 3 минуты Точнее она не в математике, а вот в таком грубом измменении проверки условия. И надо посмотреть варианты исправить её. Добавлено через 55 минут тут исправил
есть смещение столбца одного в отличии от варианта без последней вставки ассемблерной. И так явно причину не увидеть . Просто жалко терять треть производительности на проверку условия. Ну может это и мой предрасудок, но кажется потеря есть, лучшая проверка условия - циклы, быстрее всего и желательно на равенство нулю.
0
|
||||||
|
|
||||||
| 13.03.2023, 21:45 [ТС] | ||||||
|
Это тихий ужас. Мне пришлось раньше увеличить результат подсчёта больших шагов на единицу, а теперь мне пришлось его уменьшить на единицу.
Естественно в математических расчётах по метке logic я его на единицу увеличил. как-то так Кликните здесь для просмотра всего текста
тем не менее скрин отработавшего вот этого кода, исправление ошибки изменения скорости не повлекло
0
|
||||||
|
|
||||||
| 14.03.2023, 01:03 [ТС] | ||||||
|
Если я делал проверку условия - то от меня требовалось писать какие-то кривые под них заточенные выражений.
например вот это
Это просто мозг выносяще. Добавлено через 3 минуты я думаю, что если volvo захочет вникнуть - он сможет найти в коде то, о чём я, у удивится сам наверное. Хотя...мб это просто совпадение какое-то...в конце концов зачем ему это...да и мне собственно- ну так значит так. Теперь математика. Добавлено через 7 минут То есть получается что когда я пишу на высокоуровневом ЯП - тот требует от меня писать всякую фигню, И я её пишу эту фигню, хоть и понимаю что она как чёрт в табакерке какой-то. Как только я начинаю переводить код на низкий уровень - он всех этих чертей сразу травит на меня и код не работает, мне приходится долго и нудно этих чёртиков кикать по одному. Я не знаю почему так, но это так. Но это всё так - абстракция, к слову. Добавлено через 1 час 28 минут Работа честная, никакой халтуры. Мне пока нечего больше сказать. В общем я дальше оптимизирую расчёты под метками logic. Всё по честному. Добавлено через 1 час 33 минуты Единственное что, что я показал ну максимальную почти разбежку в показаниях таймера, от клика до клика они разнятся, но в среднем почти диапазон держится разрыва.
0
|
||||||
|
|
|
| 14.03.2023, 09:04 [ТС] | |
|
Но так или иначе без высокоуровнего ЯП сложнее. Просто нужно усвоить некоторые правила низкоуровневой оптимизации программы написанной на высокоуровневом языке программирования.
Гораздо проще проводить оптимизацию в высокоуровневом языке программирования, но низкоуровневую, а потом переводить всё на низкоуровневыйязык, если изначально планировался именно он. Тут всё есть для отладки алгоритмов - визуальные компоненты, это очень важно. Простота создания графических компонентов - важно для отладки низкоуровневой оптимизации приложений, может не как сам отладчик, но тем не менее. Ну это всё конечно моё личное мнение. Мнение скорее не как айтишника, потому что там в основном одно и то-же мнение, а как DIY, которому просто захотелось создать эффективное ПО, хотя наверное чаще говорят в таких случаях хакер - любитель. Опыт просто любителя наверное отличался-бы... но тут ещё тяга к лайфхакам - поломать голову над какой-нибудь задачкой - это интересно, потому что в случае провала можно списать всё на размышления, а занести результаты в архивы личной памяти.
0
|
|
|
|
|||||||
| 14.03.2023, 13:12 | |||||||
Добавлено через 1 минуту К стати, в на Дельфи такой номер не прокатывает. Попробую в Lаzarus.
0
|
|||||||
|
|
||||
| 14.03.2023, 13:54 [ТС] | ||||
|
Это слишком очевидно. volvo я немного описал совсем другие странности, но те действительно можно назвать такими.
0
|
||||
|
|
||||||||||||
| 14.03.2023, 14:08 | ||||||||||||
Будет тоже самое.
1
|
||||||||||||
|
|
|||||||
| 14.03.2023, 15:55 [ТС] | |||||||
|
Добавлено через 1 час 29 минут Всё, я что-то не подумал, больше ассемблерными вставками я не могу увеличить быстродействие. Это финиш. Ну расчёт трассировки на поле 10 000 на 10 000 за 0,25 секунды (без сохранения) я считаю не плохой результат. Ну тут конечно ещё хитрость в коде самом, но то не в счёт, там я ничего не замерял, просто прикрутил что-то, а что-то убрал. В конце концов ассемблерные метки я измерил, последнюю и 30 процентов придатка скорости от неё - эффект. Математику я не смог ассемблером улучшать - нет смысла вообще никакого, немного улучшил математику, но сказать что чтобы это как-то выразилось - не могу. Вот так вот, угол до 0- 45 градусов, вход в карту нижняя левая ячейка , пока так , ну и слава богу, надоело уже улучшать Кликните здесь для просмотра всего текста
Добавлено через 10 минут Хотя был смысл, если длина карты значительно меньше ширины, но я уже откатил всё назад - протупил жаль. И несколько компиляций успел сделать, так что бэкап бесполезен. нне хватит, харош. на этом и заканчиваю с ассемблером в этом коде.
0
|
|||||||
|
1067 / 988 / 153
Регистрация: 10.08.2015
Сообщений: 5,394
|
|
| 20.03.2023, 09:44 | |
|
Гпи, готу и асм в одном флаконе. Хретгир, что у тебя в голове? Все, что должен делать гуй—брать значения из одного компонента, передавать в функцию, которая делает расчет, брать результат и передавать его в другой компонент.
0
|
|
| 20.03.2023, 09:44 | |
|
Помогаю со студенческими работами здесь
20
Не вызывается событие Button.Click Как определить обработчик события Button.Click Реализовать метод Гаусса для события button.Click Groupbox.BackColor=Transparent, не срабатывает событие click button Элемент Label, поддерживающий событие Click как у Button Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|