作业3:深入理解Callback函数 376

lab 5.2项目结构

linktableInternal.h: 该文件包含了两个结构体,分别为LinkTableNode, LinkTable。linkTableNode结构体是链表节点,指向下一个链表指针的节点;linkTable结构体是链表。

linktable.h: 引用linktableInternal.h,定义了对链表和链表节点操作的方法

linktable.c:Linktable.h所定义的方法的具体实现

回调函数

回调函数是一种常用于软件开发的机制,它通过函数指针实现了函数之间的灵活调用。具体而言,回调函数是将一个函数的指针作为参数传递给另一个函数,在后者执行过程中通过该指针调用前者。回调函数通常用于特定的响应操作,减小了模块之间的依赖。

以实验代码为例:

tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, 
                        int Condition(tLinkTableNode * pNode, void * args),
                        void * args)
{
    if(pLinkTable == NULL || Condition == NULL)
    {
        return NULL;
    }
    tLinkTableNode * pNode = pLinkTable->pHead;
    while(pNode != NULL)
    {    
        if(Condition(pNode, args) == SUCCESS)
        {
            return pNode;				    
        }
        pNode = pNode->pNext;
    }
    return NULL;
}

此处在遍历过程中,使用Condition函数来判断所设定的条件。SearchLinkTableNode函数并不关注Condition的实现条件,只需在满足时跳出即可。

在满足Condition函数的参数条件下,我们可以自己设定Condition条件,将其作为参数传入即可,在不同的地方可以实现多种不同的功能,实现了代码的解耦,增强了代码的可重用性。

在该实验中,Condition的实现如下:

int SearchCondition(tLinkTableNode * pLinkTableNode, void * args)
{
    char * cmd = (char*) args;
    tDataNode * pNode = (tDataNode *)pLinkTableNode;
    if(strcmp(pNode->cmd, cmd) == 0)
    {
        return  SUCCESS;  
    }
    return FAILURE;	       
}

以异步callback为例

在多线程情况下,主线程需要根据其他线程的执行结果做一定地处理,在此过程中,只需A向B注册回调函数,在B处理完之后使用该Callback函数返回处理结果给A即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值