Имя: Пароль:
IT
 
Обратные вызовы в программировании
0 Beduin
 
07.02.14
17:53
Как это внутри работает? Компилятор сразу создает код для функции или переходит для ее выполнения в другое место?
1 ДенисЧ
 
07.02.14
17:56
Он организовывает косвенный переход по переданному адресу.
2 Beduin
 
07.02.14
17:58
(1) Получается мы ему говорим, что вот эта функция перегружена и для ее выполнения сходи по такому адресу?
3 ДенисЧ
 
07.02.14
17:59
(2) типа того.
4 Beduin
 
07.02.14
18:04
Просто в java с этим перемудрили. Создают, какие-то анонимные классы из интерфейсов, в них перегружают функции, потом их назначают обработчикам. Не то чтобы сложно, как то мутно все.
5 Beduin
 
07.02.14
18:05
Пытаюсь понять ход мыслей разработчиков компилятора, зачем так усложнять.
6 Torquader
 
08.02.14
00:27
Вообще, обратный вызов - пошло ещё с ассемблера, когда мы какой-то стандартной функции передаём адрес своей функции, которую нужно вызвать при возникновении события или ещё при каких-то действиях.
Почему так оказалось проще - а потому, что в традиционной модели программирования требовалось наличие какого-то события проверять периодически, что не всегда удобно. Если код работает с прерываниями, то система может в любой момент прервать выполнение кода, вызвать любую функцию, а потом продолжить выполнение основного алгоритма.
(4) В java есть реальная многопоточность, поэтому там приходится делать обёртки для синхронизации, чтобы нельзя было "дважды войти в одну и ту же воду", когда два потока выполняют одно и то же действие одновременно.