工程化编程实战callback接口学习笔记

1.编译代码

1) windows下导入pthread包

2)完成编译并运行

help和version指令没有问题,quit发生错误。

2.调试代码

浏览代码,首先可以定位问题发生在109行;说明在输入quit时p指针错误的为NULL;

指针p的值由函数FindCmd得到,因此再分析此处;

 

同理,可以定位到问题在SearchLinkTableNode函数:

 

在SearchLInklableNode函数中,condition函数作为参数输入,也就是其为callback函数,而searchlinklableNode函数为call-in函数;

而SearchLinkTableNode函数返回NULL只有两种可能:

1)链表为空;

2)遍历完整个链表却没有对应的command node;

分析易知产生错误原因是没有找到对应command node,从initMenuData函数可知存储quit的node是在链表尾:

而SearchLInklableNode函数中判断遍历完成的条件为

 

即当前节点为尾结点时终止,而AddLinkTableNode函数中,每添加一个新节点,尾结点直接设置为新增节点:

所以导致SearchLInklableNode函数在到达尾结点时即终止并返回NULL。

3.修改并测试

找到问题来源后,将SearchLInklableNode函数中的whlie(pNode != pLinkTable->pTail)改为while(pNode != NULL)即可;

修改后重新编译并测试:

 

 得到正确输出。

4.callback接口设计总结

callback即回调函数,即将一个函数作为另一个函数的传入参数,当函数内需要使用callback函数时再发生调用,同时可以调用call-in函数中的参数,实现双向调用;

使用此函数可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数。

 

 

 

 

 

 

         

 

posted @ 2020-03-19 21:39  mrcorazon  阅读(139)  评论(0)    收藏  举报