Red de conocimientos turísticos - Información de alquiler - ¿Qué es una función de devolución de llamada?

¿Qué es una función de devolución de llamada?

¿Cuál es la diferencia entre funciones de devolución de llamada y funciones ordinarias?

No hay diferencia

La única diferencia es el método de llamada

Cuando otras funciones llaman a una función normal, la función se escribe directamente dentro de la persona que llama Llamada de nombre

La función de devolución de llamada generalmente se pasa a la persona que llama como un parámetro. La persona que llama no sabe a qué está llamando.

Otro punto es que las funciones de devolución de llamada se usan principalmente en múltiples. -threading.

¿Qué es la función de devolución de llamada?

Primero, hagamos una metáfora vívida: pídeme que te llame cuando termine y te llamaré. Podrás obtener mis resultados, agregarlos a tu trabajo y continuar completando otros. trabajo.Esto se llama devolución de llamada. El teléfono móvil es el medio para que le notifique. Es la función de devolución de llamada, también llamada función de devolución de llamada, es una función proporcionada por la aplicación para ser llamada por el sistema Windows. DLL u otra DLL Generalmente se utiliza para interceptar mensajes y obtener información del sistema o manejar eventos asincrónicos. La aplicación le dice a la DLL el puntero de dirección de la función de devolución de llamada y la DLL llama a la función en el momento adecuado. La función de devolución de llamada debe cumplir con el formato de parámetro y el método de transferencia preespecificados; de lo contrario, el programa o sistema fallará tan pronto como la DLL lo llame. Normalmente, la función de devolución de llamada utiliza el método de llamada API estándar de Windows, es decir, __stdcall. Por supuesto, el compilador DLL puede definir el método de llamada por sí mismo, pero el programa cliente también debe cumplir con las mismas regulaciones. En el modo __stdcall, los parámetros de la función se insertan en la pila en orden de derecha a izquierda, a menos que se indiquen explícitamente como punteros o referencias, los parámetros se pasan por valor. antes de que la función regrese. Comprender la función de devolución de llamada Cuando un programa llama a una función (generalmente denominada API), es equivalente a que un programa llame a una función. La relación se expresa de la siguiente manera: llamar (llamar) al programa -------. -----------→ dll Cuando el programa llama a una función, pasa la dirección de su propia función como parámetro a la función llamada por el programa (entonces su propia función se llama función de devolución de llamada). Se requiere una devolución de llamada. Las funciones DLL de las funciones a menudo son funciones que deben realizar ciertas operaciones repetidamente. La relación se expresa de la siguiente manera: llamar (llamar) al programa --------------------. → dll ↑ ¦ ¦ ____________________________¦ devolución de llamada (devolución de llamada) Cuando la función que llama pasa el valor de retorno a la función de devolución de llamada, puede usar la función de devolución de llamada para procesar o completar ciertas operaciones. En cuanto a cómo definir su propia función de devolución de llamada, depende de la función API específica utilizada. Muchos tipos diferentes de funciones de devolución de llamada tienen varios parámetros. Las descripciones de estos parámetros generalmente se explican en la ayuda, como los parámetros y los valores de retorno. la función de devolución de llamada De hecho, en pocas palabras, la función de devolución de llamada es llamada por la DLL después de que la función que escribe cumple ciertas condiciones. También hay un dicho (más fácil de entender): ¡La función de devolución de llamada es como una función de procesamiento de interrupciones! cumple automáticamente con las condiciones que usted establezca. Para hacer esto, necesita hacer tres cosas: 1. Declaración; 2. Definición; 3. Establecer la condición de activación, que es convertir el nombre de su función de devolución de llamada en una dirección como parámetro en su función para facilitar la llamada a DLL. NET Framework Guía del desarrollador Una función de devolución de llamada es código en una aplicación administrada que ayuda a una función DLL no administrada a completar su tarea. Las llamadas a la función de devolución de llamada se pasan desde la aplicación administrada indirectamente a la implementación administrada a través de una función DLL. Entre las diversas funciones DLL que se llaman con llamadas de plataforma, algunas requieren funciones de devolución de llamada en código administrado para ejecutarse correctamente. Implementación y funciones de devolución de llamada Para llamar a la mayoría de las funciones DLL desde código administrado, cree una definición administrada de la función y luego llame a la función. Este proceso es relativamente sencillo. Para utilizar funciones DLL que requieren funciones de devolución de llamada, existen algunos pasos adicionales. Primero, debe consultar la documentación de la función para determinar si requiere una devolución de llamada. A continuación, se debe crear la función de devolución de llamada en la aplicación administrada. Finalmente, se llama a la función DLL, pasando un puntero a la función de devolución de llamada como parámetro.

La imagen de la derecha resume estos pasos. La función de devolución de llamada es muy adecuada para utilizarla cuando se realizan tareas repetidamente.

¿Qué es una función de devolución de llamada?

Una función de devolución de llamada es una función que usted escribe y deja que el sistema escrito previamente la llame. Cuando llamas a funciones del sistema, es una llamada directa. Deje que el sistema llame a su función, que es una devolución de llamada. Pero si estás satisfecho con esta conclusión de una sola frase, realmente no la entenderás.

La función de devolución de llamada puede considerarse como información adicional que se pasa para permitir que otros hagan cosas.

Por ejemplo, si A le pide a B que haga algo, dependiendo de la granularidad, puede entenderse como una función que llama a la función B, o una clase que usa la clase B, o un componente que usa el componente B, etc. De todos modos, A le dice a B que haga algo.

Cuando B hace esto, no tiene suficiente información, pero A sí. Requiere que A entre desde afuera, o que B tome la iniciativa de postularse hacia afuera. Para B, uno obtiene información pasivamente y el otro obtiene información activamente. Algunas personas llaman a estos dos métodos empujar información y extraer información.

Cuando A llama a B, A necesita pasar parámetros a B. Por ejemplo, una función simple:

int max(int ​​​​a, int b

Para usar esta función para obtener el valor máximo de los dos, a y b deben); ser transmitido desde el exterior. Esto es fácil de entender.

void qsort(void *, size_t, size_t, int (*)(const void *, const void *));

Esta función se utiliza para ordenar y el último parámetro es La función de devolución de llamada parece ser más difícil de entender. Esto se debe a que el código y los datos están separados artificialmente.

Hagamos una pausa por un momento y echemos un vistazo a la parte más extraña de las computadoras, que es la unificación de código y datos. Este es un umbral. Si no lo superas, muchos conceptos no quedarán claros. Solemos decir que los programas informáticos se dividen en dos partes: código y datos. Mucha gente piensa que el código puede ejecutarse y ser dinámico, mientras que el código utiliza los datos y son estáticos. Estas son dos cosas completamente diferentes.

De hecho, el código es solo una descripción del comportamiento. Por ejemplo, hay un robot que puede encender las luces, apagar las luces y barrer el piso. Si llegas a un acuerdo con el robot, 0 significa encender las luces, 1 significa apagar las luces y 2 significa barrer el piso. Emito la cadena de comando, 0 1 2, y puedo controlar el robot para que encienda las luces, las apague y barra el piso. Luego se acuerda utilizar representación binaria, y una instrucción con dos dígitos tendrá una cadena de números, 000111. En este momento, la cadena de números 000111 describe una serie de acciones del robot. Esto se entiende desde un aspecto como código. , que puede controlar el comportamiento del robot. Pero por otro lado, se pueden transferir, registrar y modificar, que son datos. Siempre que todos estén de acuerdo, el código se puede codificar en datos. Cuando los datos se interpretan y ejecutan, también se convierten en código.

No es necesario distinguir el código y los datos y, en conjunto, se denominan información. Dado que se pueden pasar int max (int ​​a, int b) int, double y otras cosas que representan datos ordinarios, ¿por qué no se puede pasar la función que representa el código? Algunos idiomas no diferencian y su función (que representa código) tiene el mismo estado que int y double. Este es un lenguaje en el que las funciones son valores de primera clase.

Algunos lenguajes no pueden almacenar funciones, crear funciones dinámicamente o destruir funciones dinámicamente. Sólo se puede almacenar un puntero a una función, que el lenguaje llama función como valor de segunda clase.

Además, algunos idiomas no solo pueden transferir funciones, sino que también utilizan cierta información externa (incluido código, datos) en la función. Esos lenguajes pueden pasar y almacenar funciones junto con la información utilizada por la función. Este tipo de función y la información que utiliza en su conjunto se denomina cierre.

Unifica código y datos. Después de superar este umbral, muchos conceptos difíciles de entender quedarán mucho más claros.

Ahora volvamos a ver la función de devolución de llamada.

La función de devolución de llamada significa que A le pide a B que haga algo. Si B lo está haciendo y no tiene suficiente información y no sabe cómo hacerlo, dejará que se maneje afuera.

Por ejemplo, en el ejemplo de clasificación anterior, si A le pide a B que clasifique, B hará la clasificación, pero la clasificación necesita saber cuál es más grande que cuál B no lo sabe, por lo que. A necesita contarlo. Y este tipo de juicio sobre cuál es más grande es una acción en sí misma. Dado que el primer valor no se puede pasar a la función en lenguaje C, está diseñado para pasar el puntero de función del segundo valor.

¿Qué significa la función de devolución de llamada js?

jb51/article/59447

Ya no hagas preguntas tan simples aquí, puedes consultarlas directamente

¿Cómo entender la función de devolución de llamada? ¿Cuáles son los beneficios de las funciones de devolución de llamada?

En pocas palabras, el usuario es el implementador y el implementador necesita llamar a la función A(). Sin embargo, para que la función A() sea. universal, debe llamarse según los deseos del implementador. El número cbB(), donde cbB() es la función de devolución de llamada. Las funciones de devolución de llamada se utilizan ampliamente en la programación de Windows.

¿Qué es una función de devolución de llamada?

Una función de devolución de llamada puede separar a la persona que llama del destinatario. A la persona que llama no le importa quién es la persona que llama, todo lo que necesita saber es que hay una función llamada con un cierto prototipo y ciertas restricciones (como un valor de retorno de int).

Un ejemplo es la salida de datos de la recopilación de audio. Después de la recopilación de audio, los datos de audio deben entregarse al usuario, pero el usuario no sabe cuándo están llenos y pueden leerse, por lo que. generalmente se establece como una función de devolución de llamada, que el módulo de recopilación de audio llama una vez completada la recopilación de audio. El usuario solo necesita configurar el puntero de la función de devolución de llamada y el usuario puede configurarlo usted mismo. Función de procesamiento de datos reales escrita por el usuario.

Ejemplo de función de devolución de llamada en lenguaje C. Comprenderá qué es una función de devolución de llamada después de leerlo

La función de devolución de llamada se establece mediante la llamada de la capa superior

La parte inferior Layer llama a la función de la capa superior a través del puntero de función

Solo se puede simular un único archivo en varios archivos

Por ejemplo,

#include typedef void (. *pFuncCb) (int); define la función de devolución de llamada. void callback1(int a){ printf("se llama a la función de devolución de llamada1 y parámetro = %d\n", a);print1}void callback2(int a){ printf("se llama a la función de devolución de llamada2 y parámetro = %d\n" ", a); print 2}pFuncCb callback_function;void lowerFunc(int n){ int i; for(i = n; i < n+10; i ++) if(callback_function) callback_function(i);}int main( ){ callback_function = callback1; lowerFunc(1); imprimirá 1 diez veces, 1 a 10 callback_function =NULL;

callback_function = callback2; lowerFunc(100); imprimirá 2 diez veces, 100 a 110 devolverá 0;}

¿Qué es la función CallBack y cómo usarla?

¿Qué es? la función CallBack, cómo utilizar la función de devolución de llamada

Significado de los caracteres de formato

d Ingrese un entero decimal

o Ingrese un entero octal

x Ingrese un entero hexadecimal

u Ingrese un entero decimal sin signo

f o e Ingrese un número real (en forma decimal o exponencial)

c Ingrese un único caracter

s cadena de entrada

2) Carácter "*": se utiliza para indicar el elemento de entrada. La variable correspondiente no se asignará después de la lectura, es decir, el valor de entrada será. saltado.

Por ejemplo:

scanf("%d %*d %d",&a,&b);

Cuando la entrada es: 1 2 3, 1 se asigna a a, 2 se omite y 3 se asigna a b.

3) Ancho: utilice un número entero decimal para especificar el ancho de la entrada (es decir, el número de caracteres).

Por ejemplo:

scanf("%5d",&a);

Entrada: 12345678

Asigne solo 12345 a la variable a , El resto está truncado.

Otro ejemplo:

scanf("%4d%4d",&a,&b);

Introduzca: 12345678

será 1234 se asigna a a y 5678 se asigna a b.

Qué es una función de devolución de llamada, documento anterior

Una función de devolución de llamada es una función llamada a través de un puntero de función. Si pasa un puntero de función (dirección) como parámetro a otra función, y cuando este puntero se usa para llamar a la función a la que apunta, decimos que es una función de devolución de llamada. La función de devolución de llamada no es llamada directamente por el implementador de la función, sino que es llamada por otra parte cuando ocurre un evento o condición específica para responder al evento o condición.

Debido a que la persona que llama y el destinatario se pueden separar, a la persona que llama no le importa quién es el destinatario. Sólo necesita saber que hay una función llamada con un prototipo y restricciones específicos. En resumen, la función de devolución de llamada permite al usuario pasar el puntero del método a llamar como parámetro a una función, de modo que la función pueda usar diferentes métodos de manera flexible cuando maneje eventos similares.

¿Quieres saber qué hace la función de devolución de llamada en la práctica? Primero supongamos que hay una situación: queremos escribir una biblioteca que proporcione la implementación de ciertos algoritmos de clasificación (como clasificación por burbujas, clasificación rápida, clasificación por conchas, clasificación por agitación, etc.) para que la biblioteca sea más versátil. , no queremos incrustar la lógica de clasificación en la función y permitir que el usuario implemente la lógica correspondiente o hacer que la biblioteca esté disponible para múltiples tipos de datos (int, float, string). Puede utilizar punteros de función y realizar devoluciones de llamadas.

Las devoluciones de llamada se pueden utilizar como mecanismos de notificación. Por ejemplo, a veces es necesario configurar un temporizador en el programa A. Cada vez que se alcanza un tiempo determinado, el programa A recibirá la notificación correspondiente, pero el implementador del mecanismo de notificación no sabe nada sobre el programa A. Luego, se necesita un puntero de función con un prototipo específico para que la devolución de llamada notifique al programa A que se ha producido el evento. De hecho, la API utiliza una función de devolución de llamada SetTimer() para notificar al temporizador. Si no se proporciona ninguna función de devolución de llamada, también enviará un mensaje a la cola de mensajes del programa.

Otra función API que utiliza el mecanismo de devolución de llamada es EnumWindow (), que enumera todas las ventanas de nivel superior en la pantalla. Cada ventana puede llamar a una función proporcionada por otro programa a través de ella y pasar el programa de procesamiento de la ventana. Por ejemplo: si la persona que llama devuelve un valor, continúe la iteración; de lo contrario, salga. A EnumWindow() no le importa dónde está la persona que llama o qué hizo con el controlador que pasó, solo le importa el valor de retorno porque, según el valor de retorno, continuará la ejecución o saldrá.

En cualquier caso, la función de devolución de llamada se hereda del lenguaje C.

En C++, las funciones de devolución de llamada solo deben usarse cuando se interactúa con código C o cuando se trata de una interfaz de devolución de llamada existente. Excepto por lo anterior, se deben usar métodos virtuales o functores en lugar de funciones de devolución de llamada en C++.

¿Para qué sirve la función de devolución de llamada del método en jQuery?

La función procesa los datos devueltos. Por ejemplo, el siguiente código agrega los datos devueltos a la lista.

$. ajax(

{

tipo: "get",

tipo de datos: "json",

url: encodeURI ("test. ashx?name=" + $("#<%=TextBox1.ClientID %>").val()),

beforeSend: function() { $("#panel") ("Cargando Enter..."); },

éxito: función(datos) { var datos1 = eval('' + datos + ''); $("#panel")("" ); $ .each(datos1, función(i) { $("#panel").append("

nombre:" + datos1[i].nombre + " " + "edad:" + data1[i ].age + ""); }) },

éxito:función(datos){$("#panel")(datos);},

completo : función() { alerta("Carga del arco completada"); }

}

)