Функция обратного вызова и модель событий Delphi Функция обратного вызова: функция обратного вызова — это механизм, в котором вызывающая сторона передает некоторые параметры объекту при инициализации объекта (здесь объект относится к объектам в ООП, глобальным функциям и т. д.), при этом передавая функцию адрес, по которому вызывающая сторона может получить доступ к объекту. Эта функция представляет собой соглашение об уведомлении между вызывающей стороной и вызываемой стороной. Когда происходит согласованное событие, вызываемая сторона (обычно включая рабочий поток) вызывает функцию в соответствии с адресом функции обратного вызова. Таким образом, вызывающий объект находится в одном потоке, а вызываемый — в другом потоке. В Windows API есть некоторые функции, которые используют функции обратного вызова, например CreateThread, SetWindowLong и т. д. Соответствующая функция обратного вызова определяется в следующей форме: function CallBackFunc(Wnd: HWND; Msg, WParam, LParam: Longint): Longint;stdcall;PROcedure ThreadFunction(Ptr: Pointer); stdcall; Сообщение: сообщение также можно рассматривать как некоторую форму обратного вызова, поскольку сообщение также передается вызывающей стороной вызываемой стороне во время инициализации. Дескриптор и номер сообщения передаются вызываемой стороне при возникновении согласованного события. . Вызывающий абонент отправляет сообщение. Таким образом, вызывающий объект находится в основном потоке, а вызываемый — в основном потоке или рабочем потоке. Модель событий Delphi. Многие визуальные компоненты в VCL Delphi используют модели событий, такие как событие TForm OnCreate. Принцип таков: укажите функцию события во время разработки, и когда событие запускается во время выполнения, будет вызываться функция, указанная во время разработки. . функция события. Механически модель событий Delphi аналогична обратным вызовам. Но есть некоторые различия в конкретных формах. Чистая функция обратного вызова имеет форму глобальной функции, а событие Delphi — в форме метода объекта. То есть можно определить следующий тип функции обратного вызова: typeTCallBackFunc =. процедура (pData: указатель) объекта; это делает событие Delphi только внутренним. Функция обратного вызова является межъязыковой. Также обратите внимание, что функция обратного вызова обычно представляет собой поток, созданный в теле обратного вызова (компоненты в Delphi находятся в основном потоке), поэтому требуется защита критического раздела.