реклама на сайте
подробности

 
 
5 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Структура функций, В чём преимущество ?
ViKo
сообщение May 3 2014, 22:01
Сообщение #16


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(A. Fig Lee @ May 3 2014, 22:47) *
Не знаю то там в википедии, но смысл именно чтобы по какомуто событию передать данные обратно.
Асинхронно! Именно это и имеют ввиду "callback". Когда он "обратно позвонит" неизвестно.
Ждать нам некогда. Поэтому вот финкция и "будут деньги - звони, а мне некогда"

Обратно - это куда? "Сигнал посылаем - вы что это там? А нас посылают обратно!"
Можете привести пример менее аб... абстрактный?
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 3 2014, 23:10
Сообщение #17


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(ViKo @ May 3 2014, 17:01) *
Обратно - это куда? "Сигнал посылаем - вы что это там? А нас посылают обратно!"
Можете привести пример менее аб... абстрактный?

Привожу. Посылаю CAN message. Записать я его по SPI записал.
Теперь когда результат доставки будет - неизвестно, а мне надо еще посылать.
Передаю "позывные" своего message и говорю: свиснешь как доставишь - получилось, нет..
И передаю следующий в буффер..
Вот когда будет результат доставки, CAN вызовет callback (позовет меня обратно) и скажет смог или нет


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 4 2014, 06:13
Сообщение #18


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Handshake? По-моему, вы спекулянт (понятиями).
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 4 2014, 06:29
Сообщение #19


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



По-моему, callback - это просто.
Например, есть функция вывода jpg-картинки на экран. Она умеет декодировать картинку. Но не знает, как отрисовать пиксель на экране. Мы вызываем её, и в качестве параметра передаём указатель на функцию отрисовки пикселя.
Такой подход позволяет уменьшить связность программ.
Можно не передавать функцию в качестве параметра при вызове каждый раз, а передать её один раз при инициализации библиотеки.
Функция может выполняться в отдельном потоке. Тогда она будет вызывать наш callback асинхронно.
Но это уже частности, суть от этого не меняется.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 4 2014, 13:01
Сообщение #20


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(AHTOXA @ May 4 2014, 01:29) *
По-моему, callback - это просто.
Например, есть функция вывода jpg-картинки на экран. Она умеет декодировать картинку. Но не знает, как отрисовать пиксель на экране. Мы вызываем её, и в качестве параметра передаём указатель на функцию отрисовки пикселя.
Такой подход позволяет уменьшить связность программ.
Можно не передавать функцию в качестве параметра при вызове каждый раз, а передать её один раз при инициализации библиотеки.
Функция может выполняться в отдельном потоке. Тогда она будет вызывать наш callback асинхронно.
Но это уже частности, суть от этого не меняется.

нет, это не callback. Это аналог виртуальной функции в C++, которая может быть подменена на ходу.
Callback всегда асинхронен. И всегда по какому то событию.

Цитата(ViKo @ May 4 2014, 01:13) *
Handshake? По-моему, вы спекулянт (понятиями).

Это абсолютно другое понятие.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 4 2014, 13:09
Сообщение #21


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(A. Fig Lee @ May 4 2014, 19:01) *
нет, это не callback. Это аналог виртуальной функции в C++, которая может быть подменена на ходу.
Callback всегда асинхронен. И всегда по какому то событию.

Вы что-то путаете. callback - это функция обратного вызова. И всё.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 4 2014, 15:10
Сообщение #22


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(AHTOXA @ May 4 2014, 08:09) *
Вы что-то путаете. callback - это функция обратного вызова. И всё.

Нет гарантии что каллбэк синхронен. Именно поэтому он так и называется.
"Право на звонок" передается другому треду.
Если функция вызывается из того же треда то это не каллбэк.

Как там экономно такси вызывают? Звонишь на номер и отключаешся.
Ждешь каллбэк. Полная аналогия.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 4 2014, 16:56
Сообщение #23


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(A. Fig Lee @ May 4 2014, 21:10) *
Нет гарантии что каллбэк синхронен. Именно поэтому он так и называется.
"Право на звонок" передается другому треду.
Если функция вызывается из того же треда то это не каллбэк.

Ага. Было "Callback всегда асинхронен", теперь "Нет гарантии что каллбэк синхронен" sm.gif
Жду правильной версии: "Понятие асинхронности ортогонально понятию каллбэк" sm.gif
Суть калбэка - обратный вызов. Почитайте хоть википедию, там куча примеров синхронных каллбэков.
Могу примеры из WinAPI с синхронными каллбэками.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 4 2014, 18:19
Сообщение #24


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Что есть "обратный вызов"? По-моему, это неправильная печать перевод. Можно представить что-то вроде "туда-обратно". Типа, функция, возвращающаяся назад, а не вызывающая другие функции.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 4 2014, 18:36
Сообщение #25


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(AHTOXA @ May 4 2014, 11:56) *
Ага. Было "Callback всегда асинхронен", теперь "Нет гарантии что каллбэк синхронен" sm.gif

А это одно и тоже. он асинхроннен, но в теории может совпасть.


Цитата(ViKo @ May 4 2014, 13:19) *
Что есть "обратный вызов"? По-моему, это неправильная печать перевод. Можно представить что-то вроде "туда-обратно". Типа, функция, возвращающаяся назад, а не вызывающая другие функции.

Нет. Не то. Не понимаю, что не понятно?
Это не "туда обратно". Это аналогично прерыванию. Время события как правило неизвестно.
Поэтому ни какие "туда-обратно".
Это не "функция возвращающаяся назад".
И не "вызывающая другие функции".
У ембеддеров есть понятие прерывания, у десктопных или как вы их называете, обычных программеров прерывания нет.
Если ему надо переслать чтото в последовательный порт, он запишет данные в буффер,
вызовет функцию работы с портом, передаст туда аддресс callback функции и уйдет по делам делать другую работу.
Когда посылка завершится, система вызовет callback и передаст туда результаты.

Никакая это не "тудаобратно". И не "возвращающаяся назад"


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 4 2014, 18:43
Сообщение #26


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(ViKo @ May 5 2014, 00:19) *
Что есть "обратный вызов"? По-моему, это неправильная печать перевод. Можно представить что-то вроде "туда-обратно". Типа, функция, возвращающаяся назад, а не вызывающая другие функции.

Нормальный перевод. Мы вызываем библиотечную функцию, она в процессе своей работы вызывает нас обратно, через переданную ей в качестве параметра функцию обратного вызова.

Цитата(A. Fig Lee @ May 5 2014, 00:36) *
А это одно и тоже. он асинхроннен, но в теории может совпасть.

Ну хватит уже нести чушь. Вы неправильно понимаете, что такое callback.
Вот пример синхронного калбэка: EnumWindows
Цитата
BOOL WINAPI EnumWindows(
_In_ WNDENUMPROC lpEnumFunc,
_In_ LPARAM lParam
);

Parameters:
lpEnumFunc [in]
Type: WNDENUMPROC
A pointer to an application-defined callback function. For more information, see EnumWindowsProc.



--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 4 2014, 18:55
Сообщение #27


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(AHTOXA @ May 4 2014, 21:43) *
Нормальный перевод. Мы вызываем библиотечную функцию, она в процессе своей работы вызывает нас обратно, через переданную ей в качестве параметра функцию обратного вызова.

По-вашему, получается, callback - это функция, в которую передали другую функцию в качестве параметра. Так прямо "вызывает"? Может, все таки, возвращается? rolleyes.gif
Разве вызываемая функция не вернется в вызывающую (библиотечную, в вашем примере)?
По-моему, callback - это как раз та функция, которую передали.

Функция, возвращающаяся назад...? Так они все назад... sm.gif
Go to the top of the page
 
+Quote Post
Tiro
сообщение May 4 2014, 18:58
Сообщение #28


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Цитата(ViKo @ May 4 2014, 21:19) *
Что есть "обратный вызов"? По-моему, это неправильная печать перевод. Можно представить что-то вроде "туда-обратно". Типа, функция, возвращающаяся назад, а не вызывающая другие функции.

Не хочу использовать понятие функции, поскольку возможны подмены из математики. Переход по адресу подпрограммы с возвратом - вызов подпрограммы, что и есть "вызов функции".
Себе Вы можете представить что угодно, но поскольку Вы не нативный носитель языка и не лингвист, то лучше обратиться к причинам, по которым "callback" появился.
Причины просты: при декомпозиции программы появляются отдельные независимые модули, которые могут получать данные, которые должны обрабатываться различно в зависимости от контекста выполнения. Поэтому им не надо их обрабатывать, а надо сообщить о них "знающему" модулю. Это легко сделать, когда программа монолитна, а если модули независимы, то необходимо передавать в связанные модули адреса подпрограмм для "обратной связи" по обработке данных. Вот подпрограмма, адрес которой передается в таком случае - имеет жаргонизм "callback".

P.S. И прошу помнить о раздельной компиляции модулей.
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 4 2014, 19:06
Сообщение #29


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



То есть, события, асинхронность - не при чем? Просто передаем один из возможных методов (функций)? И что же тогда означает "callback"?
Go to the top of the page
 
+Quote Post
Tiro
сообщение May 4 2014, 19:10
Сообщение #30


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Цитата(ViKo @ May 4 2014, 22:06) *
То есть, события, асинхронность - не при чем? Просто передаем один из возможных методов (функций)?

Конечно (Только "методы" - это такое ограничение на "функции", которое наложил C++).
Вот у Вас есть программно-аппаратный модуль, который программирует таймер, обрабатывает от него прерывания. Он все знает о таймере. Вы его запрограммируете и все. А как узнать, что время, которое Вы заказали, прошло? Надо передать адрес подпрограммы, которая будет вызвана по истечении времени. Это как раз простейший пример "callback" подпрограммы.

P.S. В данном контексте подпрограмма для "обратной связи" модулей.
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01506 секунд с 7
ELECTRONIX ©2004-2016