Что подразумевается под термином «крючок» в программировании? - PullRequest
216 голосов
/ 22 января 2009

Я недавно услышал термин «крючок», когда говорил с некоторыми людьми о программе, которую я писал. Я точно не знаю, что подразумевается под этим термином, хотя из разговора я понял, что ловушка - это тип функции. Я искал определение, но не смог найти хороший ответ. Может ли кто-нибудь дать мне представление о том, что обычно означает этот термин, и, возможно, небольшой пример, иллюстрирующий определение?

Ответы [ 12 ]

1 голос
/ 22 января 2009

Цепочка хуков - это набор функций, в которых каждая функция вызывает следующую. Что важно в цепочке хуков, так это то, что программист может добавить еще одну функцию в цепочку во время выполнения. Один из способов сделать это - найти известное место, где хранится адрес первой функции в цепочке. Затем вы сохраняете значение этого указателя функции и перезаписываете значение по начальному адресу на адрес функции, которую вы хотите вставить в цепочку подключений. Затем вызывается функция, выполняет свою работу и вызывает следующую функцию в цепочке (если вы не решите иначе). Естественно, есть ряд других способов создать цепочку хуков, от прямой записи в память до использования средств метапрограммирования таких языков, как Ruby или Python.

Пример цепочки хуков - способ, которым приложение MS Windows обрабатывает сообщения. Каждая функция в цепочке обработки либо обрабатывает сообщение, либо отправляет его следующей функции в цепочке.

1 голос
/ 22 января 2009

Зачастую перехват относится к перехвату сообщений Win32 или эквивалентам Linux / OSX, но более общий перехват - это просто уведомление другого объекта / окна / программы / и т. Д., О котором вы хотите получать уведомление, когда происходит указанное действие. Например: все окна в системе уведомят вас о том, что они собираются закрыться.

Как правило, перехватывать несколько опасно, так как выполнение этого без понимания того, как это влияет на систему, может привести к нестабильности или, как минимум, к неожиданному поведению. Это может быть ОЧЕНЬ полезно в определенных обстоятельствах, подумал. Например: FRAPS использует его, чтобы определить, в каких окнах должен отображаться счетчик FPS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...