|
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
|
|
Для чего нужны callback-функции10.04.2009, 17:55. Показов 87546. Ответов 103
Метки нет (Все метки)
0
|
|
| 10.04.2009, 17:55 | |
|
Ответы с готовыми решениями:
103
|
|
Комп_Оратор)
|
|||
| 05.06.2020, 13:39 | |||
|
Колбэк это кусок кода, который выполняется Колбэк это кусок кода Колбэк это кусок Ведь как не крути callback это call по сути своей. В меру жидкий, причём.
1
|
|||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 31.08.2020, 18:24 | ||
|
0
|
||
|
Комп_Оратор)
|
||
| 31.08.2020, 18:39 | ||
|
JeyCi, а вы как думаете, - что важнее, - расширение функционала парамеризацией на уровне типа, стратегии с параметризацией параметризации, организация сообщений между различными частями кода типа, - "Если произойдёт Это и будет утро - разбуди" или "Если произойдёт Это и будет вечер - принеси чашку тёплого молока" и т.п. ? То есть, когда Исполнителю лучше и не знать, что ему предстоит сделать? Мне кажется, что общего ответа нет. Поэтому вопрос похож на "Что такое хорошо?". По данной теме можно кучу конкретики обсуждать и места будет мало, (имхо).
0
|
||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||||
| 31.08.2020, 20:26 | ||||
|
из Достоинств мне понравился этот
gui сейчас коллбэками обрабатываю из вторичного потока в U++ (понятное дело с синхронизацией), а там же - во вторичный поток из gui что-то пока просигналить не могу событием смены флага остановки, чтобы его заметил метод объекта, работающего в этом вторичном потоке ![]() ... - не всё так просто, как хотелось бы... на Qt не предлагайте переходить, пока с коллбэками и синхронизацией не разберусь...утром была в deadlock'e... уже темнеет - вообще не знаю, где я p.p.s Не по теме: и что-то InternetExplorer замучал меня на кибере - на каждой странице спрашивает, разрешить ли странице доступ к буферу копирования - и не надоел ему этот диалог со смной?
2
|
||||
|
Комп_Оратор)
|
|||
| 31.08.2020, 20:51 | |||
1
|
|||
|
18 / 19 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
|
| 24.07.2022, 17:30 | |
|
Я полагаю что само по себе программирование с помощью колбэк функций это порочная практика. Они должный уйти в прошлое. И программирование должно перейти от объектно ориентированного к субьектноориентированному.
По сути все это и делается но только через задний вход "где-то на аляске" сейчас это называется "микросервисы" то есть куски кода которые выполняются независимо и общаются между собой по какому-то интерфейсу (почему-то навязывается протокол веб сервиса) Есть очень серьёзные подозрения что весь windows в глуби своей изначально именно так и сделан а winapi, с его колбеками это суровое изобретение чтобы ввести по ложному пути доверчивую публику. Совершенно не понимаю почему в жаваскрипе и winape функции обработки событий также названы колбеками? Это конечно весело использовать названия приятные старожилам отрасли но это не соответствует действительности. Это напоминает мне историю с переменными в бейсике в 90-х годах. Все серьезные программеры дико ржали над теми кто не понимает зачем надо каждый раз определять тип переменной, и почему она не может быть динамической сразу. Мол порядок должен быть это вам не детский сад. А потом оказалось что они есть, и динамические переменные и динамические массивы и все тоже самое только в бейсике каждый человек мог их использовать сразу с первой строчки кода, а вот в С++ это все либо в ручную с помощью распределения памяти, либо функциями STL. Где начинающий программер а где STL ? Могли бы например делать язык программирования так: Есть динамические переменные с автоматически определяемым типом и они доступны СРАЗУ самым простым видом объявления, но КОГДА ВАМ НУЖНО можно использовать точно определяемые переменные с точной величиной и для этого есть дополнительный синтаксис.
0
|
|
| 24.07.2022, 18:06 | |
|
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 24.07.2022, 18:15 | |
|
Святогор, ни одна архитектура процессора не умеет "из коробки" работать с произвольными типами переменных. А значит если по-умолчанию использовать "произвольный тип", то код в среднем получится неоптимальным, поскольку перед обработкой процессором нужно будет превращать в форму, в которой он сможет эту переменную обработать, а потом возвращать обратно. Если так нужно - добро пожаловать в python - там всё именно так и сделано. А в С++ такое делать можно (как из коробки - используя динамическое преобразование типов, так и самостоятельно) но в большинстве случаев не нужно.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 25.07.2022, 13:56 | |
|
0
|
|
|
18 / 19 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
||
| 28.07.2022, 12:16 | ||
|
Я говорю о том что почемуто разработчиками языков и сред разработки принято делать отсутствие легкого дефолтного пути. Лучше всего это понять на примере open gl. Прежде чем нарисовать один пиксел я должен очень много знать о том как устроен open gl. На это нужно потратить месяц. Причем код для вывода простейшего обьекта на экран содержит 30 строчек. Это заградительный подход и по всей видимости сделанный намерено. Вот другой подход. Одна команда draw_pixel(x,y); Которая если нет "окна по умолчанию" сама его создаст в базовом разрешении 640 на 480 и нарисует этот пиксел дефолтным черным цветом. Очевидно что это как вы говорите далеко не оптимальный способ. Далее следуют такие соображения, Хотите другой цвет? ОК есть перегрузка функции draw_pixel(x,y,с); Вам не нравится дефолтное разрешение? Ок есть команда set_canvas_resolution (x,y). Что вам хочется самому создать окно и определить будет ли оно на весь экран? Ок тогда вот вам обьект с методами и свойствами. Далее вы вдруг поняли что таким макаром не создать хорошей анимации, ну что ж тогда рисуйте в специальный буфер а потом выводите его на экран. Что оказалось что 3d объекты хлопотно пикселами рисовать? Не вопрос рисуйте полигонами есть команда. То есть вы пользуетесь той глубиной возможностей которая вам нужна а не сразу всем хламом аж до самого асемблера. Таким образом если нужно вы спокойно , быстро и комфортно придете ко всем свойствам open gl и даже до аппаратных особенностей видеокарты дойдете. В этом случае все становится очевидным и легко осваивается до того уровня который нужен в вашем проекте. И делаете вы это ещё в 5 классе средней школы сразу без чтения книг и и просмотра гнусавых гайдов на ютубе записаных ночью на кухне пока все спят. Мы же видим обратную ситуацию, практически во всех случаях с нас требуют сразу максимальное знание всего устройства системы потому что без знания компьютера аж до самого до кода микрокоманд любой алгоритм это хождение по минному полю, потому что вы постоянно натыкаетесь на неожиданные ограничения и не очевидные глюки. Вроде бы вы все сделали по феншую, а потом вы находите в интернете абзац текста в котором какой-то финский программист нехотя и небрежно говорит что все на самом деле нужно делать по-другому потому что есть еще более глубокие особенности системы ( откуда же он засранец все это узнал елки палки если этого нет в официальной документации?) Добавлено через 17 минут Лично у меня есть полное ощущение того что крупные производители базового софта намерено усложняют освоение программирования и вообще порог вхождения в эту индустрию. Всё таки деньжищи там совершенно гигантские крутятся и никто не хочет расставаться с халявным потоком простых человеческих радостей. Ну вот например программирование в стиле микросервисов напрашивалось изначально ещё во времена бейсика на спектруме. Несколько кусков кода работающих независимо и обменивающихся сообщениями это очевидный подход. Вы сделали танчик и он должен существовать отдельно это же сразу очевидно. Это можно было бы делать как на уровне среды разработки которая может квантовать время так и на аппаратном уровне чтобы время между выполнением участков кода квантовал процессор. Это всема простая задача. Более того никаого лишнего расхода производительности цп она не требует Но это не было сделано и не сделано и по сегодняшний день. Вместо этого был дан "обьектно ориентированный подход" который имеет одно фундаментальное ограниечение которое в итоге приводит в упадок любой проект. Дело в том что ООП представляет собой описание некой работающей сущности а не является ей по сути и по этой причине чем точнее вы пытаетесь описать обьект реального мира тем быстрее растет сложность по экспоненте и конца и края не видно.
0
|
||
|
Неэпический
|
|||||||
| 28.07.2022, 12:28 | |||||||
|
Святогор, вы совершаете одну ошибку - не учитываете реальность и историю развития.
![]() А вообще, всё это можно одной картинкой описать. В разных ОС или в рамках одной ОС окна создаются совершенно по разному, имеют разную толщину рамки, разные устройства имеют разный размер пикселей и т.д. Вот вам простые вопросы для решения. 640x480 - это вместе с рамкой или без нее? А если устройство вывода не поддерживает такое разрешение? А если 640x480 - это без рамки то что делать на устройстве, которое максимум 640x480 поддерживает? А если с рамкой, то какая останется область для рисования? Правильно - везде разная. ![]() А представьте, что у вас вообще нет окон. ![]() А вот более простые и понятные способы сделать тоже самое - это как раз задача более высокоуровневых библиотек, которые оборачивают низкоуровневый API, предоставляя вам более простые интерфейсы, но урезая ваши возможности.
0
|
|||||||
|
фрилансер
6509 / 5764 / 1135
Регистрация: 11.10.2019
Сообщений: 15,407
|
||||
| 28.07.2022, 12:28 | ||||
![]() ![]()
0
|
||||
|
18 / 19 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
||
| 28.07.2022, 12:43 | ||
|
2)Не так уж много книг может освоить человек. 3)Тратить время и ресурсы интеллекта надо разумно тем более если есть более простой подход который позволяет начинать писать код сразу без чтения томов. (тот который я описал если вы поняли)
0
|
||
|
18 / 19 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
||
| 28.07.2022, 13:07 | ||
|
Тем не менее поясняю. Программисту в начале должно быть все равно оконная это среда или нет. Есть там рамки или нет. Если система где запущен код имеет графические возможности то по команде draw_pixel(x,y) пиксел должен быть нарисован. Далее при надобности используйте более глубокие возможности так как я уже пояснил в предыдущем посте. Дефолтный вход должен быть и все тут. Именно таким образом можно делать так что все пятикласники начнут писать работающий софт и никак иначе. Извините но вот например консоль как-то сумели сделать универсально работающую во всех ос и в каждом утюге, хотя это тоже сложная вещь у нее и графический вид и клавиатура и мышка работает. Не знаю почему но в том же С++ по чему то за 50 лет никто не продвинулся а стандартизации ввода вывода дальше консоли. Ни изображения ни звука ни управления там нет ни в каких стандартных потоках. Хорошо я понимаю вы давите на то что нельзя сделать дефолтный вывод пиксела чтоб он работал и на виндовс и на линукс и на ардуине и на сегментном индикаторе микроволновки с PIC контроллером. Во первых я не это имел ввиду, дефолтный вход для графики (равно как и для всего другого) даже если он реализован в рамках одной платформы windows это всеравно очень большое дело Во вторых при большом желании можно сделать так что и полная кросплатформенность будет работать . Для этого нужно ввести возможность исследования системы самим кодом. Вы должны имет возможность вывести этот пиксел незная как это будет работать, например вы ввели команду draw_pixel(x,y) а оказалось что это сегментный индикатор часов а вовсе не full hd у вас загорелся какой-то сегмент. Вы видите что система работает, после чего вы спрашиваете у системы а что собственно за графическое устройство у вас сэр? Вам приходит ответ устройство имеет разрещение 3 на 5 пикселов и вообще оно не матричного типа. Руководствуясь этими соображениями у вас через 15 минут работы есть код работающий на совершенно неизвестной вам системе
0
|
||
|
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
|
|
| 28.07.2022, 13:24 | |
|
Добавлено через 6 минут
0
|
|
|
18 / 19 / 4
Регистрация: 27.06.2016
Сообщений: 236
|
|||||||
| 28.07.2022, 13:28 | |||||||
|
Разумеется это пример который показывает общий подход и не только для графики. Это касается и звука и всех коммуникаций и средств управления. Это реализовано в некоторых местах почти в чистом виде в ардуино. Например это касается коммуникации по серийному порту. Там есть команда Serial.print(); С помощью неё вы сразу выводите информацию в серийный порт. Причем ей все равно что вы ей скормили текст или число. Всё работает сразу с дефолтными настройками. Если надо настройки соединения можно изменить дополнительной командой. Если надо выводить информацию точно побайтно есть другая команда. И так далее вы можете углубляться до прерываний и кода на ассемблере. А теперь серийный порт на c#
Прошу заметить что этот код скорее всего не будет работать несмотря на то что он взят с официальной документации. Это обычное дело. Там версии не сходятся или вы его "нетуда" вставили. Мало того данный код совершенно не годится для нормальной работы , дело в том что его ещё надо отправить в отдельный поток чтобы он не мешал работать интерфейсу вашей программ . Ау пятикласиник? он уже спит....
0
|
|||||||
|
Неэпический
|
||||
| 28.07.2022, 13:36 | ||||
![]() "API" железяки куда сложнее, почему вы не предложите прямо в "процессор" добавить команду Serail.print?
0
|
||||
| 28.07.2022, 13:36 | |
|
приведите пожалуйста реальный прмиер: для чего нужны дружественные функции?
callback функции не для кнопок на экране, а для клавиш на клав. и мышке. Как? Для чего нужны интерфейсы? Для чего нужны указатели? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|