La función de devolución de llamada entiendo

¿Qué es una función de devolución de llamada ? 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, cuando este puntero se usa para llamar a la función a la que apunta, decimos que se trata de una función de devolución de llamada. El implementador de la función no llama directamente a la función de devolución de llamada, sino que la llama otra parte cuando ocurre un evento o condición específicos, y se usa para responder al evento o condición.

Por ejemplo: Hay dos personas, una se encarga de comprar verduras y la otra se encarga de cocinar. El que cocina tiene que esperar a que el comprador compre las verduras y las ponga en la cocina antes de empezar a cocinar, en cuanto a si el plato es agrio, dulce o amargo, la última palabra la tiene el que cocina. No importa quién compre la comida, la persona que compra la comida solo necesita proporcionar los ingredientes. Luego, en la función de devolución de llamada, la persona que escribe la función de devolución de llamada es equivalente a la persona que compra verduras, y la persona que llama a la función de devolución de llamada es equivalente a la persona que cocina. La persona que escribe la función de devolución de llamada notificará el evento cuando ocurra el evento y pasará los valores requeridos (ingredientes) juntos. La persona que llama a la función de devolución de llamada sabe que esto sucedió y puede usar estos valores (ingredientes) ) para lograr la función que quiere lograr.

La persona que escribe la función de devolución de llamada (la persona que compra verduras):

Paso 1: Defina el tipo de función de devolución de llamada
typedef void (*GetInfoCallBack)(ingredients_info_t* info);

Paso 2: Defina la función GetInfoCallBack del tipo de función de devolución de llamada
get_info_callback = NULL

Paso 3: Pase esta dirección de función de devolución de llamada a la función de interfaz
get_info_ingredients (llamada GetInfoCallBack) para que obtenga información (ingredientes);

Paso 4: Proporcione la dirección de devolución de llamada del tercer paso a la función de devolución de llamada del segundo paso
get_info_ingredients(GetInfoCallBack callock)
{     get_info_callback = callock; }

Paso 5: Pase la información (ingredientes) que obtuvo a través de esta función de devolución de llamada a la persona que desea la información (persona que cocina)
(get_info_callback)(&info);

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>


typedef struct{
    char fish[64];
    char Pork[64];
    char Greens[64];
    int state;
}ingredients_info_t;

//第一步,定义回调函数类型
typedef void (*GetInfoCallBack)(ingredients_info_t* info); //一般在.h里面定义
//第二步:定义回调函数类型的函数
GetInfoCallBack get_ingredients_callback = NULL;  //一般在.c里面定义

//第三步:把这个回调函数地址传到你获取信息(食材)的接口函数
int get_info_ingredients(GetInfoCallBack callock)
{
    //第四步:把第三步的回调地址给第二步的回调函数
    get_ingredients_callback = callock;

    //买菜,获取食材
    ingredients_info_t info;
    memset(&info, 0, sizeof(ingredients_info_t));
    strcpy(info.fish, "fish");
    strcpy(info.Pork, "Pork");
    strcpy(info.Greens, "Greens");

    info.state = 1;//当值为1时,说明该事件发生了;菜已经买回来了

    //第五步:把你获取的信息(食材)通过这个回调函数传出去,给要这些信息的人(炒菜的人)
    (get_ingredients_callback)(&info);

}

La persona que llama a la función de devolución de llamada (la persona que cocina) :

El primer paso es llamar a la interfaz para registrar una función de devolución de llamada.

El segundo paso es realizar el contenido de devolución de llamada cuando se obtiene la información (ingredientes).


//第二步,当获取到信息时(食材),实现回调内容
void Stir_fry_callnack(ingredients_info_t *info)
{
    if(info->state == 1){
        printf("我要开始做:%s\n", info->fish);
        printf("我要开始做:%s\n", info->Pork);
        printf("我要开始做:%s\n", info->Greens);
    }
}

int main(int argc, char const *argv[])
{
    //第一步,调用接口,并注册一个回调函数
    get_info_ingredients(Stir_fry_callnack);
    return 0;
}

El resultado de la llamada es el siguiente:

Supongo que te gusta

Origin blog.csdn.net/weixin_42432281/article/details/104563163
Recomendado
Clasificación