工程化编程实战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函数中的参数,实现双向调用;
使用此函数可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数。

浙公网安备 33010602011771号